今天开始正式学习Java并记录每天学习到的API。
java.utils.Arrays
文档
Array 数组
与Javascript这种动态语言不同,Java中数组有两个特点:
- 长度固定
- 元素类型相同
创建数组
可以先声明数组变量,再初始化,然后对每个元素设置值。这里长度参数是必须的:
int[] arr1;
arr1 = new int[2];
arr1[0] = 0;
arr1[1] = 1;
System.out.println(arr1[0]);
也可以在声明数组变量时直接初始化,这样长度也是固定的:
int[] arr2 = {1,2,3 };
如果希望对数组的元素统一设置一个初始值,可以使用 java.utils.Arrays.fill()
int[] arr3;
arr3 = new int[3];
Arrays.fill(arr3, 88);
System.out.println(Arrays.toString(arr3));
// [88, 88, 88]
遍历数组
可以通过for循环
int[] arr3 = {1,2,3 };
for (int i = 0; i < arr3.length; i++) {
System.out.print(arr3[i]);
}
也可以通过for...of
for (int ele : arr3) {
System.out.print(ele + ", ");
}
还可以通过 Stream
的 forEach
:
Arrays.stream(arr3).forEach(v -> System.out.print(v + ", "));
这里是把数组转成了 Stream
来操作,关于 Stream
后面再学。
拷贝数组
拷贝数组可以使用两个API
System.arraycopy
必须提前创建好拷贝后的数组:
int[] arr3 = { 1,2,3 };
int[] arr4 = new int[5];
System.arraycopy(arr3, 0, arr4, 2, 2);
System.out.println(Arrays.toString(arr4));
// [0, 0, 1, 2, 0]
Arrays.copyOfRange
会返回新创建的数组:
int[] arr3 = { 1,2,3 };
int[] newArr4 = Arrays.copyOfRange(arr2, 0, 2);
System.out.println(Arrays.toString(newArr4));
// [1, 2]
排序
int[] arr3 = { 35, 23, 2 };
Arrays.sort(arr3, 0, 3);
Arrays.sort
是 原地排序并且默认是 升序排序。
java.utils.Arrays
java.utils.Arrays 是专门用来处理数组的类,使用的都是该类的静态方法。
fill()
填充数组
equals
& deepEquals
对比数组
mismatch
对比两个数组是不是不同,返回第一个值不相同的索引。
hashCode
& deepHashCode
生成 hashCode
copyOf(T[] original, int newLength)
& copyOfRange(T[] original, int from, int to)
拷贝数组
setAll
设置数组的每个元素的值:
int[] arr4 = { 35, 22, 23, 2 };
Arrays.setAll(arr4, idx -> arr4[idx] * 10);
System.out.println(Arrays.toString(arr4));
// [350, 220, 230, 20]