Java精通之路-数组与java.utils.Arrays

67 阅读1分钟

今天开始正式学习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 = {123 };

如果希望对数组的元素统一设置一个初始值,可以使用 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 = {123 };
for (int i = 0; i < arr3.length; i++) {
  System.out.print(arr3[i]);
}

也可以通过for...of

for (int ele : arr3) {
  System.out.print(ele + ", ");
}

还可以通过 StreamforEach:

Arrays.stream(arr3).forEach(v -> System.out.print(v + ", "));

这里是把数组转成了 Stream 来操作,关于 Stream 后面再学。

拷贝数组

拷贝数组可以使用两个API

System.arraycopy 必须提前创建好拷贝后的数组:

int[] arr3 = { 123 };
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 = { 123 };
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]

toString & deepToString: 转成字符串