文章目录
数组(掌握)
一、数组的定义
在Java中,可以使用以下格式来定义一个数组,如下:
数据类型 [] 数组名 = new 数据类型 [元素个数或数组长度];
int [] x = new int [100];
上述语句就相当于在内存中定义了100个int类型的变量,第一个变量的名称为 x[0] ,第二个变量的名称为x[1] ,以此类推,第100个变量的名称为 x[99] ,这些变量的初始值都是 0 。为了更好地理解数组的这种定义方式,可以将上面的一句代码分成两句来写,具体如下:
//声明一个int[]类型的变量
int [] x;
//创建一个长度为100的数组
x = new int[100];
数组中的每个元素都有一个索引(也可称为角标),要想访问数组中的元素可以通过“x[0]、x[1]、……x[98]、x[99]”的形式。需要注意的是,数组中最小的索引是0,最大的索引是“数组的长度-1”。在Java中,为了方便我们获得数组的长度,提供了一个length 属性,在程序中可以通过==“数组名.length”==的方式来获得数组的长度,即元素的个数。
接下来,通过一个案例来演示如何定义数组以及访问数组中的元素,如下所示。ArrayDemo01.java
//声明变量
int[] arr;
//创建数组对象
arr = new int[3];
System.out.println("arr[0] = " + arr[0]);//访问数组中的第一个元素
System.out.println("arr[1] = " + arr[1]);//访问数组中的第二个元素
System.out.println("arr[2] = " + arr[2]);//访问数组中的第三个元素
System.out.println("数组的长度是" + arr.length);//打印数组的长度
运行结果如下所示:
arr[0] = 0
arr[1] = 0
arr[2] = 0
数组的长度是3
在上述代码中声明了一个int[]类型变量arr,并将数组在内存中的地址赋值给它。在5~7行代码中通过角
标来访问数组中的元素,在第8行代码中通过length属性访问数组中元素的个数。从打印结果可以看出,数组中的三个元素初始值都为0,这是因为当数组被成功创建后,数组中元素会被自动赋予一个默认值,根据元素类型的不同,默认初始化的值也是不一样的。具体如下表所示。
元素的默认值
数据类型 | 默认初始值 |
---|---|
byte、short、int、long | 0 |
float、double | 0.0 |
char | 一个空字符(空格),即’\u0000’ |
boolean | false |
引用数据类型 | null,表示变量不引用任何对象 |
如果在使用数组时,不想使用这些默认初始值,也可以显式地为这些元素赋值。接下来通过一个程序来学习如何为数组的元素赋值,如下所示。ArrayDemo02.java
int [] arr = new int[4];
arr[0] = 1;//为第一个元素赋值1
arr[1] = 2;//为第二个元素赋值2
//打印每个元素的值
System.out.println("arr[0] = " + arr[0]);
System.out.println("arr[1] = " + arr[1]);
System.out.println("arr[2] = " + arr[2]);
System.out.println("arr[3] = " + arr[3]);
运行结果如下所示:
arr[0] = 1
arr[1] = 2
arr[2] = 0
arr[3] = 0
在上述代码中,第1行代码定义了一个数组,此时数组中每个元素都为默认初始值0。第2、3行代码通过赋值语句将数组中的元素arr[0]和arr[1]分别赋值为1和2,而元素arr[2]和arr[3]没有赋值,其值仍为0,因此打印结果中四个元素的值依次为1、2、0、0。
在定义数组时只指定数组的长度,由系统自动为元素赋初值的方式==称作动态初始化。==
在初始化数组时还有一种方式叫做==静态初始化==,就是在定义数组的同时就为数组的每个元素赋值。数组的静态初始化有两种方式,具体格式如下:
1、类型 [] 数组名 = new 类型 [] {元素,元素,…};
2、类型 [] 数组名 = {元素,元素,元素,…};
上面的两种方式都可以实现数组的静态初始化,但是为了简便,建议采用第二种方式。接下来通过一
段代码来演示数组静态初始化的效果,如下所示。ArrayDemo03.java
//数组的静态初始化
int [] arr = {
1,2,3,4};
//打印每个元素的值
System.out.println("arr[0] = " + arr[0]);
System.out.println("arr[1] = " + arr[1]);
System.out.println("arr[2] = " + arr[2]);
System.out.println("arr[3] = " + arr[3]);
注意:
上述代码中采用静态初始化的方式为数组每个元素赋予初值,分别是1、2、3、4。需要注意的是第2行代码千万不可写成int[] arr = new int[4]{1,2,3,4};,这样写编译器会报错。原因在于编译器会认为数组限定的元素个数[4]与实际存储的元素{1,2,3,4}个数有可能不一致,存在一定的安全隐患。
二、数组的遍历
在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。接下来通过一个案
例来学习如何使用for循环来遍历数组,如下所示。ArrayDemo04.java
//数组的静态初始化
int [] arr = {1,2,3,4};
//用for循环遍历数组的元素
for (int i = 0; i <arr.length ; i++) {
System.out.println("arr["+i+"] = " + arr[i]);
}
运行结果如下所示:
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
上述代码中,定义一个长度为5的数组arr,数组的角标为 0~4 。由于for循环中定义的变量 i 的值在
循环过程中为 0~4 ,因此可以作为索引,依次去访问数组中的元素,并将元素的值打印出来。
三、高级for循环遍历数组
我们也可以通过高级for循环(for each循环)来访问数组中的每个元素,接下来我们通过一个案例来学习如何使用高级for循环来遍历数组。如下所示。ArrayDemo05.java
高级for循环(for each)的语法格式:
for(每一个元素的数据类型 临时变量名 : 要循环的容器的变量名){
语句体;
}
//数组的静态初始化
int[] arr = {
1, 2, 3, 4};
//用高级for循环遍历数组的元素
for (int i : arr) {
System.out.println(i);
}
注意:for each循环当中的i的值指的是数组arr中的每个元素的值。
四、数组中常见的问题
4.1、数组的最值
在操作数组时,经常需要获取数组中元素的最值。接下来通过一个案例来演示如何获取数组中元素的
最大值,如下所示。ArrayDemo06.java
//数组的静态初始化
int[] arr = {1, 2, 3, 4, 5, 423, 32, 31231, 3432, 32, 435, 76};
//假设最大值的索引为0
int max = 0;
for (int i = 1; i < arr.length; i++) {
//如果下一个索引的值比设置的max的值大,就将该值重新赋值给max
if (arr[i] > max) {
max = arr[i];
}
}
System.out.println(max);
</