引语:当存放相同类型的数据时,如果一个一个的存放会导致有过多的变量名,考虑使用一个数组变量来存放它们,并通过下标来访问存在数组中的每个成员
为了生成可用的数组,我们不仅仅要声明数组(给予名称,成员类型的属性),还要为之分配内存空间,之后进行自动初始化或人工初始化
方法如下:
数据类型 数组名 [ ] 或 数据类型 [ ] 数组名
方法如下:
数组变量名 = new 数据类型 [数组长度]
也可以在定义数组的同时分配空间,例如:
int temp[] = new int[10];
注:数组一旦生成,就不允许再增加它的空间
自动初始化:
数值型的初始值:0;
字符型的初始值:’\0’;
布尔类型的初始值:false;
类对象的初始值:null;
也可以主动地人工赋值通过下标一个一个的进行赋值,或是在声明数组后直接进行初始化,此时系统会自动确定数组的长度,自动给其分配空间,格式如下:
数据类型 数组名 [ ] = {值1,值2……,值n}
注:整体初始化是可以的,但不可整体赋值,如:
char s[ ] = new char[5]; s[ ] = {'a','b','c','d','e'} ;
通过下标进行访问,方法如下:
数组名 [下标]
从二维数组讲起,例如:
int temp [] [] = new int [2] [3];
可以理解为生成了两行三列的数组,但更好理解且通用的方式是数组套数组的形式,就像这个例子一样,先生成长度为2的数组,再在每个数组中生成长度为3的数组,就像分叉的树枝一样
数组名.length
使用for……each语句,例如:
//已将数组初始化或赋值 for(int e : a){ sum = sum+e; }
该程序中的冒号“:”表示in的意思,for(int e : a)就是 for each int e in a,即“对于数组a中的每个整数e”。通过定义一个整数变量e表示数组中的每个元素。
除了使用System.out.println()等类似方法之外,还有display(数组名),用于一下展示数组的全貌,中间用空格隔开,输出完毕时换行
为了更方便的操作数组,java在包java.util定义了个Arrays的类,该类包含了几个用static修饰的静态方法
import java.util.Arrays;
导入该类;Arrays.方法名(数组)
操作数组。方法名 | 用法 |
---|---|
toString 方法 | 该方法主要返回数组元素的字符串形式 |
equals方法 | 比较两个数组内容是否相等 |
fill 方法 | 该方法主要用于替换数组中的元素 |
sort 方法 | 该方法主要用于给数组元素排序 |
copyOf 方法 | 该方法主要用于复制数组 |
copyOfRange 方法 | 该方法主要用于复制数组,需要指定起始位置 |
binarySearch 方法 | 该方法主要用于查找指定元素索引值 |
compare方法 | 按字典顺序比较两数组 |
fill 方法用来替换数组中的元素。它既可以直接替换数组中所有元素,也可以通过指定索引范围来替换部分元素。
直接替换数组中所有元素:
fill(arr, value)
参数说明:
示例:把数组中所有元素替换成 8。
public static void main(String[] args) { int [] arr={2,3,4,8,-2,0,-43,88}; Arrays.fill(arr,8); // 使用fill方法把数组中所有值替换成8 System.out.println(Arrays.toString(arr)); // 打印新数组中的值 }
执行结果:
[8, 8, 8, 8, 8, 8, 8, 8]
替换部分元素
fill(arr, fromIndex,toIndex, value)
参数说明:
示例:把数组中部分元素替换成 8。
public static void main(String[] args) { // 请在Begin-End间编写代码 /********** Begin **********/ int [] arr={2,3,4,8,-2,0,-43,88}; Arrays.fill(arr,1,5,8); // 使用fill方法把数组中部分值替换成8 System.out.println(Arrays.toString(arr)); // 打印新数组中的值 /********** End **********/ }
执行结果:
[2, 8, 8, 8, 8, 0, -43, 88]
sort 方法用于给数组元素排序,默认排序方式为升序。
示例:
public static void main(String[] args) { int [] arr={8,2,7,84,12,1,786,92,34}; // 定义原数组 Arrays.sort(arr); // 对数组元素排序 System.out.print(Arrays.toString(arr)); // 打印数组 }
执行结果:
[1, 2, 7, 8, 12, 34, 84, 92, 786]
copyOf 方法和 copyOfRange 方法都用于复制数组,其中 copyOfRange 方法需要指定起始位置。 示例:
public static void main(String[] args) { int [] arr={8,2,7,84,12,1,786,92,34}; // 定义原数组 int[] ints = Arrays.copyOf(arr, 4);// 复制数组,第二个参数指定新数组长度 // 复制数组,当指定新数组长度大于原数组时,会填充默认值 int[] ints1=Arrays.copyOf(arr,10); System.out.println(Arrays.toString(ints)); // 打印数组 System.out.print(Arrays.toString(ints1)); // 打印数组 int[] ints2 = Arrays.copyOfRange(arr, 2, 4); // 复制数组,第二、三个参数指定索引值 // 复制数组,当指定新数组长度大于原数组时,会填充默认值 int[] ints3 = Arrays.copyOfRange(arr, 0, 10); System.out.println(Arrays.toString(ints2)); // 打印数组 System.out.print(Arrays.toString(ints3)); // 打印数组 }
执行结果:
[8, 2, 7, 84] [8, 2, 7, 84, 12, 1, 786, 92, 34, 0] [7, 84] [8, 2, 7, 84, 12, 1, 786, 92, 34, 0]
binarySearch 方法用于查找指定元素索引值。因为该方法使用的是二分法查找,所以在调用该方法之前,必须先调用 sort() 方法进行排序,如果数组没有排序,那么结果是不确定的。
示例:
public static void main(String[] args) { int [] arr={8,6,84,12,3,786,7,34}; // 定义原数组 int i = Arrays.binarySearch(arr, 7); // 未对数组排序,直接查找元素 System.out.println(i); // 打印索引值 Arrays.sort(arr); // 对原数组排序 System.out.println(Arrays.toString(arr)); // 打印排序后的数组 int x = Arrays.binarySearch(arr, -2); // 排序后查找数组中不存在的元素,不存在则会输出-1 int y = Arrays.binarySearch(arr, 7); // 排序后查找数组中存在的元素 System.out.println(x); // 打印索引值 System.out.print(y); // 打印索引值 }
执行结果:
-3[3, 6, 7, 8, 12, 34, 84, 786]-12
两方法的常用使用一致,compare(数组1,数组2),equals(数组1,数组2),前者是根据字典逐一比较数组中的元素,并返回布尔值,而后者则是比较两数组中的内容是否相同,并返回布尔值,当然还有“==”的方法,此时比较的不仅仅是两数组中的内容是否相同还要比较两数组的地址是否相同,据此返回布尔值
具体方法的详细使用,需参看 JDK 11 API java中文帮助文档