Java进行时——数组(续)之Arrays工具类和异常

本文详细介绍了Java的Arrays工具类,包括数组元素的拼接、排序、二分查找、复制功能,以及数组中常见的角标越界和空指针异常。这些方法有助于简化数组操作,但处理异常同样重要。
摘要由CSDN通过智能技术生成

目录

1. Arrays工具类

1.1 数组元素拼接

1.2 数组元素排序

1.3 数组元素的二分查找

1.4 数组的复制

1.5 比较两个数组是否相等

1.6 充填数组

2. 数组中常见异常

2.1 数组角标越界异常

2.2 空指针异常

结尾


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~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值