目录
1. Arrays工具类
概述:java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法。
1.1 数组元素拼接
- static String toString(int[] a) :字符串表示形式由数组的元素列表组成,括在方括号("[]")中。相邻元素用字符 ", "(逗号加空格)分隔。形式为:[元素1,元素2,元素3。。。]
举例如下
int[] arr = new int[]{1, 2, 3, 4, 5};
System.out.println(Arrays.toString(arr));
得到的结果
[1, 2, 3, 4, 5]
1.2 数组元素排序
- static void sort(int[] a) :将a数组按照从小到大进行排序
举例如下
int[] arr = new int[]{6, 7, 3, 8, 9};
Arrays.sort(arr); // 排序
System.out.println(Arrays.toString(arr)); // 输出
得到的结果
[3, 6, 7, 8, 9]
- static void sort(int[] a, int fromIndex, int toIndex) :将a数组的[fromIndex, toIndex)部分按照升序排列
举例如下
int[] arr = new int[]{7, 6, 10, 9, 8};
// arr为数组,2表示从下标2开始,5表示到下标小于5的位置
Arrays.sort(arr, 2, 5);
System.out.println(Arrays.toString(arr));
得到的结果
[7, 6, 8, 9, 10]
注:[fromIndex, toIndex),左闭右开,开始的数为 fromIndex,结束的数是 小于toLndex
1.3 数组元素的二分查找
- static int binarySearch(int[] a, int key) :要求数组有序,在数组中查找key是否存在,如果存在返回第一次找到的下标,不存在返回负数
1.4 数组的复制
- static int[] copyOf(int[] original, int newLength) :根据original原数组复制一个长度为newLength的新数组,并返回新数组
举例如下
int[] arr = new int[]{1, 2, 3, 4, 5};
int[] arr1 = Arrays.copyOf(arr, 4);
int[] arr2 = Arrays.copyOf(arr, 9);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
得到的结果
[1, 2, 3, 4]
[1, 2, 3, 4, 5, 0, 0, 0, 0]
由此可知,若新数组的长度比原来的数组长度小,则将超过的部分舍弃;若新数组的长度比原来的数组长度大,则新数组赋值完后将剩余的数组元素设置为0
- static int[] copyOfRange(int[] original, int from, int to) :复制original原数组的[from,to)构成新数组,并返回新数组
1.5 比较两个数组是否相等
- static boolean equals(int[] a, int[] a2) :比较两个数组的长度、元素是否完全相同
举例如下
int[] arr = new int[]{1, 2, 3, 4, 5};
int[] arr1 = new int[]{1, 2, 3, 4, 5};
int[] arr2 = new int[]{5, 4, 3, 2, 1};
System.out.println(Arrays.equals(arr, arr1));
System.out.println(Arrays.equals(arr, arr2));
得到的结果
true
false
此处也说明了不仅仅比较长度,每一个数组元素是按照下标一一对应比较
1.6 充填数组
- static void fill(int[] a, int val) :用val值填充整个a数组
举例如下
int[] arr1 = new int[]{1, 2, 3, 4, 5};
int[] arr2 = new int[5];
Arrays.fill(arr1, 6);
Arrays.fill(arr2, 7);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
得到的结果
[6, 6, 6, 6, 6]
[7, 7, 7, 7, 7]
由此可知,static void fill(int[] a, int val) 充填的不仅仅是没有赋值的数,还会把已经赋值的充填为 val
- static void fill(int[] a, int fromIndex, int toIndex, int val):将a数组[fromIndex,toIndex)部分填充为val值
2. 数组中常见异常
2.1 数组角标越界异常
当访问数组元素时,下标指定超出[0, 数组名.length-1]的范围时,就会报数组下标越界异常:ArrayIndexOutOfBoundsException
int[] arr = new int[]{1, 2, 3, 4, 5};
// System.out.println("最后一个元素为" + arr[5]); // err, 下标越界
// System.out.println("最后一个元素为" + arr[arr.length]); // err, 下标越界
System.out.println("最后一个元素为" + arr[5]); // 正确
解释如下
创建数组,赋值5个元素,数组的索引就是0,1,2,3, 4,没有5索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。
在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
运行时,错误信息如下所示
2.2 空指针异常
当访问数组元素时,数组只进行了定义但是还未初始化,若直接调用未初始化的数组元素,就会报空指针异常:NullPointerException
int[][] arr = new int[5][]; // 定义数组
System.out.println(arr[0][0]);
解释如下
此时数组的每一行还未分配具体存储元素的空间,此时arr[0]是null,此时访问arr[0][0]会抛出NullPointerException 空指针异常。
空指针异常在图中的表现
结尾
以上便是数组Arrays工具类和异常,内容较少,但Arrays工具类能够简化代码,并且使自己能够在操作数组时更方便,而数组异常在刚刚开始学习时,也是很常见,以此,都要认真学习呀。今天便分享到这儿,有错误欢迎各位批评指正,bye~