Java学习笔记(五)——数组、排序和查找

一、数组

数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即数组就是一组数据。

(一)数组的使用

1、使用方式1——动态初始化

(1)数组的定义:     数据类型 数组名[] = new 数据类型[大小]

                          或      数据类型[] 数组名 = new 数据类型[大小]

                                    int a[] = new int[5]; 

(2)数组的引用(使用):数组名[下标/索引/index]

import java.util.Scanner;
public class Array02{public static void main(String[] args){Scanner myScanner = new Scanner(System.in);double scores[] = new double[5];for(int i = 0; i < scores.length; i++){System.out.print("请输入第" + (i + 1) + "个元素的值:");scores[i] = myScanner.nextDouble();}System.out.println("当前数组的值如下:");for(int i = 0; i < scores.length; i++){System.out.print(scores[i] + " ");}}
}

2、使用方式2——动态初始化

(1)先声明数组:  数据类型 数组名[];  或  数据类型[] 数组名;

                                int a[];

(2)创建数组:   数组名 = new 数据类型[大小];

                               a = new int[10];

import java.util.Scanner;
public class Array03{public static void main(String[] args){Scanner myScanner = new Scanner(System.in);double scores[]; //声明数组,这时scores是nullscores = new double[5]; // 分配内存空间,可以存放数据for(int i = 0; i < scores.length; i++){System.out.print("请输入第" + (i + 1) + "个元素的值:");scores[i] = myScanner.nextDouble();}System.out.println("当前数组的值如下:");for(int i = 0; i < scores.length; i++){System.out.print(scores[i] + " ");}}
}

3、使用方式3——静态初始化

(1)初始化数组:    数据类型 数组名[] = {元素值,元素值...}

                                    int a[] = {2,5,6,7,8,89,90,34,56}

       上面的用法相当于:int a[] = new int[9];

                    a[0] = 2; a[1] = 5; a[2] = 6; a[3] = 7; a[4] = 8; a[5] = 89; a[6] = 90; a[7] = 34; a[8] = 56;


public class Array01{public static void main(String[] args){double hens[] = {3, 5, 1, 3.4, 2, 50};double sum = 0;for(int i = 0; i < hens.length; i++){sum += hens[i];}System.out.println("sum=" + sum + ",avg=" + sum/hens.length);}
}

(二)数组使用注意事项和细节

1、数组是多个相同类型数据的组合,实现对这些数据的统一管理。

2、数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。

3、数组创建后,如果没有赋值,有默认值。int 0,short 0,byte 0,long 0,float 0.0,double 0.0,

char \u0000,boolean false,String null

4、使用数组的步骤:(1)声明数组并开辟空间 (2)给数组各个元素赋值 (3)使用数组

5、数组的下标是从0开始的。

6、数组下标必须在指定范围内使用,否则报下标越界异常,比如int arr[] = new int[5];的有效下标为0-4。

7、数组属于引用类型,数组型数据是对象(object)

(三)数组赋值机制

1、基本数据类型赋值,这个值就是具体的数据,而且相互不影响。(值传递/值拷贝

2、数组在默认情况下是引用传递,赋的值是地址。

public class Array06{public static void main(String[] args){int arr1[] = {1,2,3,4,5};int arr2[] = arr1;arr2[0] = 10;for(int i = 0; i < arr1.length; i++){System.out.print(arr1[i] + " ");}}
}

 

(四)数组拷贝

将arr1拷贝到arr2,要求数据空间是独立的。

public class Array07{public static void main(String[] args){int arr1[] = {1,2,3};// 开辟一个和arr1一样大的数组int arr2[] = new int[arr1.length];for(int i = 0; i < arr1.length; i++){arr2[i] = arr1[i];}// 修改arr2[0]arr2[0] = 10;// 修改arr2不会影响arr1System.out.print("arr1的元素为:");for(int i = 0; i < arr1.length; i++){System.out.print(arr1[i] + " ");}System.out.println();System.out.print("arr2的元素为:");for(int i = 0; i < arr2.length; i++){System.out.print(arr2[i] + " ");}}
}

(五)数组反转

public class Array08{public static void main(String[] args){int arr[] = {1,2,3,4,5};int temp = 0;int len = arr.length;for(int i = 0; i < len/2; i++){temp = arr[i];arr[i] = arr[len - 1 - i];arr[len - 1 - i] = temp;}for(int i = 0; i < len; i++){System.out.print(arr[i] + " ");}}
}

(六)数组扩容

要求:动态地给数组添加元素效果,实现对数组扩容。

(1)原始数组使用静态分配 int arr[] = {1,2,3};

(2)增加元素4,直接放在数组的最后

(3)用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n

public class Array09{public static void main(String[] args){int arr[] = {1,2,3};int arrNew[] = new int[arr.length + 1];for(int i = 0; i < arr.length; i++){arrNew[i] = arr[i];}arrNew[arrNew.length - 1] = 4;arr = arrNew;System.out.print("arr数组的元素为:");for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}}
}

// 数组扩容
import java.util.Scanner;
public class Array10{public static void main(String[] args){int arr[] = {1,2,3};char choose = 'n';do{System.out.print("请输入需要添加的数字:");Scanner myScanner = new Scanner(System.in);int newNum = myScanner.nextInt();int arrNew[] = new int[arr.length + 1];for(int i = 0; i < arr.length; i++){arrNew[i] = arr[i];}arrNew[arrNew.length - 1] = newNum;arr = arrNew;System.out.print("添加后的数组元素如下:");for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}System.out.println();System.out.print("是否继续添加(y/n):");choose = myScanner.next().charAt(0);}while(choose == 'y');}
}

使用链表可以优化

(七)数组缩减

要求:有一个数组,可以将该数组进行缩减,提示用户是否继续缩减,每次缩减最后那个元素。当只剩下最后一个元素,提示不能再缩减。

// 数组缩减
import java.util.Scanner;
public class Array11{public static void main(String[] args){int arr[] = {1,2,3,4,5,6,7};System.out.print("当前的数组元素如下:");for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}System.out.println();System.out.print("是否缩减数组(y/n):");Scanner myScanner = new Scanner(System.in);char choose = myScanner.next().charAt(0);while(choose == 'y'){if(arr.length == 1){System.out.print("数组元素只剩一个,不能再继续缩减");break;}int arrNew[] = new int[arr.length - 1];for(int i = 0; i < arrNew.length; i++){arrNew[i] = arr[i];}arr = arrNew;System.out.print("缩减后的数组元素如下:");for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}System.out.println();System.out.print("是否继续缩减(y/n):");choose = myScanner.next().charAt(0);}}
}

二、排序

排序是将一群数据,依指定的顺序进行排列的过程。

排序的分类:

1、内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序,包括交换式排序法、选择式排序法和插入式排序法。

2、外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序,包括合并排序法和直接合并排序法。

冒泡排序

基本思想:通过对待排序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。

// 冒泡排序
import java.util.Scanner;
public class BubbleSort{public static void main(String[] args){int arr[] = {24,69,80,57,13};int temp;for(int i = 0; i < arr.length; i++){for(int j = 0; j < arr.length - i - 1; j++){if(arr[j] > arr[j + 1]){temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}}
}

三、查找

常用的查找有两种:顺序查找、二分查找

顺序查找

案例:有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王。猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称。要求:如果找到了,就提示找到,并给出下标值。

// 顺序查找
import java.util.Scanner;
public class SeqSearch{public static void main(String[] args){String arr[] = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};System.out.print("请输入名字:");Scanner myScanner = new Scanner(System.in);String name = myScanner.next();boolean flag = true;for(int i = 0; i < arr.length; i++){if(name.equals(arr[i])){System.out.println("已找到该名字,下标值为:" + i);flag = false;break;}}if(flag){System.out.println("找不到该名字");}}
}

四、多维数组——二维数组

(一)二维数组的使用

1、使用方式1——动态初始化

语法: 类型 数组名[][] = new 类型[大小][大小]

            int a[][] = new int[2][3];

 2、使用方式2——动态初始化

(1)先声明:类型 数组名[][];

(2)再定义(开辟空间)数组名[][] = new 类型[大小][大小];

(3)赋值(有默认值)

3、使用方式3——动态初始化——列数不确定

动态创建下面二维数组:

public class TwoDimensionArray02{public static void main(String[] args){int arr[][] = new int[3][];for(int i = 0; i < arr.length; i++){arr[i] = new int[i + 1];for(int j = 0; j < arr[i].length; j++){arr[i][j] = i + 1;}}for(int i = 0; i < arr.length; i++){for(int j = 0; j < arr[i].length; j++){System.out.print(arr[i][j] + " ");}System.out.println();}}
}

4、使用方式4——静态初始化

public class TwoDimensionArray01{public static void main(String[] args){int arr[][] = {{0, 0, 0, 0, 0, 0},{0, 0, 1, 0, 0, 0},{0, 2, 0, 3, 0, 0},{0, 0, 0, 0, 0, 0}};for(int i = 0; i < arr.length; i++){for(int j = 0; j < arr[i].length; j++){System.out.print(arr[i][j] + " ");}System.out.println();}}
}

 

(二)二维数组使用注意事项和细节

1、一维数组的声明方式有:int[] x 或 int x[]

2、二维数组的声明方式有:int[][] y 或 int[] y[] 或 int y[][]

3、二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如:map [][] = {{1,2},{3,4,5}};有map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组构成,也称为列数不等的二维数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/166227.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】每日一题(添加逗号)

添加逗号&#xff0c;链接奉上 目录 方法1&#xff1a;整体存入思路&#xff1a;代码实现&#xff1a; 方法2&#xff1a;分段输出思路&#xff1a;代码实现&#xff1a; 方法1&#xff1a;整体存入 思路&#xff1a; 整体思路&#xff1a; 我们发现这个整数N对于最后1位是比…

会声会影2023官方破解版激活码

随着短视频、vlog等媒体形式的兴起&#xff0c;视频剪辑已经成为了热门技能。甚至有人说&#xff0c;不会修图可以&#xff0c;但不能不会剪视频。实际上&#xff0c;随着各种智能软件的发展&#xff0c;视频剪辑已经变得越来越简单。功能最全的2023新版&#xff0c;全新视差转…

Hadoop3教程(三十四):(生产调优篇)MapReduce生产经验汇总

文章目录 &#xff08;164&#xff09;MR跑得慢的原因&#xff08;165&#xff09;MR常用调优参数Map阶段Reduce阶段 &#xff08;166&#xff09;MR数据倾斜问题参考文献 &#xff08;164&#xff09;MR跑得慢的原因 MR程序执行效率的瓶颈&#xff0c;或者说当你觉得你的MR程…

《动手学深度学习 Pytorch版》 9.4 双向循环神经网络

之前的序列学习中假设的目标是在给定观测的情况下对下一个输出进行建模&#xff0c;然而也存在需要后文预测前文的情况。 9.4.1 隐马尔可夫模型中的动态规划 数学推导太复杂了&#xff0c;略。 9.4.2 双向模型 双向循环神经网络&#xff08;bidirectional RNNs&#xff09;…

解决windows10、windows11故障:Microsoft-Windows-Kernel-Processor-Power 事件ID:37

一、现象 windows系统日志中出现大量的“Microsoft-Windows-Kernel-Processor-Power”错误。 经过分析&#xff1a;原因是windows配置的【使用电池】默认值是5%&#xff0c;按5%计算出来的功率与CPU的最小功率不兼容&#xff0c;如&#xff1a;本机CPU最高功率是25W&#xff0…

flink中使用GenericWriteAheadSink的优缺点

背景 GenericWriteAheadSink是flink中提供的实现几乎精确一次输出的数据汇抽象类&#xff0c;本文就来看一下使用GenericWriteAheadSink的优缺点 GenericWriteAheadSink的优缺点 先看一下GenericWriteAheadSink的原理图 优点&#xff1a; 几乎可以精确一次的输出&#xf…

数据库MongoDB

MongoDB记录是一个文档&#xff0c;由一个字段和值对组成的数据结构&#xff0c;文档类似于JSON对象。 一个文档认为就是一个对象&#xff0c;字段的数据类型是字符型&#xff0c;值除了使用基本类型外&#xff0c;还可以包括其他文档&#xff0c;普通数组和文档数组。 一、…

FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6

一、FreeRTOS 介绍 什么是 FreeRTOS &#xff1f; Free即免费的&#xff0c;RTOS的全称是Real time operating system&#xff0c;中文就是实时操作系统。 注意&#xff1a;RTOS不是指某一个确定的系统&#xff0c;而是指一类操作系统。比如&#xff1a;uc/OS&#xff0c;Fr…

[翻译]理解Postgres的IOPS:为什么数据即使都在内存,IOPS也非常重要

理解Postgres的IOPS&#xff1a;为什么数据即使都在内存&#xff0c;IOPS也非常重要 磁盘IOPS&#xff08;每秒输入/输出操作数&#xff09;是衡量磁盘系统性能的关键指标。代表每秒可以执行的读写操作数量。对于严重依赖于磁盘访问的PG来说&#xff0c;了解和优化磁盘IOPS对实…

虹科分享 | 赋能物流机器人:CANopen通信如何发挥重要作用?

现代物流领域迅速融入了技术进步&#xff0c;特别是随着自主机器人的兴起&#xff0c;这一趋势越发明显。确保这些机器人在复杂的仓库环境中精确运行的一个关键方面是CANopen通信协议。该协议集成了各种组件&#xff08;电机、传感器、摄像头和先进的电池系统&#xff09;&…

flask入门(四)前后端数据传输

文章目录 1、flask后端接收来自前端的数据1&#xff09;如果前端提交的方法为POST2&#xff09;如果前段提交的方法是GET 2、flask后端向前端传数据3、案例参考文献 1、flask后端接收来自前端的数据 1&#xff09;如果前端提交的方法为POST 后端接收时的代码&#xff1a; xx…

C#使用PPT组件的CreateVideo方法生成视频

目录 需求 实现 CreateVideo方法 关键代码 CreateVideoStatus 其它 需求 我们在使用PowerPoint文档时&#xff0c;经常会使用其导出功能以创建视频&#xff0c;如下图&#xff1a; 手工操作下&#xff0c;在制作好PPT文件后&#xff0c;点击文件 -> 导出 -> 创建视…

云安全—分布式基础

0x00 前言 云必然是依赖于分布式技术来进行实现的&#xff0c;所以有必要学习和来了解分布式相关的内容 0x01 分布式计算 1.基本概述 分布式计算的定义&#xff1a;通过网络互联的计算机都具有一定的计算能力&#xff0c;他们之间互相传递数据&#xff0c;实现信息共享&…

互联网Java工程师面试题·Java 面试篇·第三弹

目录 39、JRE、JDK、JVM 及 JIT 之间有什么不同&#xff1f; 40、解释 Java 堆空间及 GC&#xff1f; 41、你能保证 GC 执行吗&#xff1f; 42、怎么获取 Java 程序使用的内存&#xff1f;堆使用的百分比&#xff1f; 43、Java 中堆和栈有什么区别&#xff1f; 44、“ab”…

记录阿里云服务器(Centos7.9)部署Thingsboard(3.4.2)遇到的一些问题

记录编译Thingsboard遇到的一些问题 部署了一个thingsboard项目到阿里云服务器上&#xff0c;历时十一天&#xff0c;遇到了很多困难&#xff0c;国内关于Thingsboard的资料确实很少&#xff0c;所以想着写一篇博客记录一下&#xff0c;或许能够给以后编译遇到类似问题的人一些…

基于nodejs+vue语言的酒店管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

JavaCV + FFmpeg 播放音视频

JavaCV FFmpeg 播放音视频 1、导入JavaCV库1.1 使用ffmpeg必要库1.2 简单FFmpeg命令 待续~~~~ FFmpeg documentation bytedeco/javacv - GitHub 1、导入JavaCV库 gradle下面这种会导入javacv-platform所有包&#xff0c;非常耗时&#xff1a;https://repo.maven.apache.org/…

安卓14通过“冻结”缓存应用程序腾出CPU,提高性能和内存效率

本月早些时候&#xff0c;我们听说更新到安卓14似乎提高了谷歌Pixel 7和Pixel 6的效率——提高了电池寿命&#xff0c;并在这个过程中减少了热量的产生。现在看来&#xff0c;安卓14的增效功能细节已经公布。 安卓侦探Mishaal Rahman在X&#xff08;前身为Twitter&#xff09;…

需要在 MySQL 服务器中监控的重要指标

MySQL是一个开源的关系数据库管理系统&#xff0c;它基于客户端-服务器模型运行&#xff0c;使用SQL作为其通信模式。它具有灵活性和可扩展性、高安全性、易用性以及无缝处理大型数据集的能力&#xff0c;由于其广泛的功能&#xff0c;MySQL 被用作数据库管理系统的一部分。 什…

c++踩坑点,类型转换

std::string转换到PVOID std::string转换到PVOID的方式如下 这样的话成功转换 “const char *” 类型的实参与 “WCHAR *” “const char *” 类型的实参与 “WCHAR *” 类型的形参不兼容 可以看到这种报错&#xff0c;可以直接强转如下&#xff1a; 但是在我们这里不适…