一、Arrays工具类简述
在java的类库中有许多现成的已经封装好的方法,可以供开发人员使用,比如我们之前学的二分法查找或者快速排序等。所以在实际的开发中,我们是不用自己编写这些常用的方法的。那么在常用的数组方法在哪里的?java作为面向对象的语言,所有方法都会封装到一个类中,而操作数组的方法就被封装到一个称为Arrays的工具类中,即java.util.Arrays。
二、Arrays工具类的使用
1.使用方法
我们需要借助javaAPI文档来查看Arrays工具类中有哪些方法,要怎么使用这些方法。API在线文档的连接如下:
2.Arrays类中常用方法汇总
a)数组元素拼接
①static String toString(int[] a):将int类型的数组a中的元素以形式[元素1, 元素2, 元素3...]打印出来。(注意:有其他参数类型的toString方法,比如double,char等。以下方法均是如此)
②tatic String toString(Object[] a):字符串表示形式由数组的元素列表组成,括在方括号("[]")中。相邻元素用字符 ", "(逗号加空格)分隔。元素将自动调用自己从Object继承的toString方法将对象转为字符串进行拼接,如果没有重写,则返回类型@hash值,如果重写则按重写返回的字符串进行拼接。
b)数组排序
①static void sort(int[] a) :将a数组按照从小到大进行排序
②static void sort(int[] a, int fromIndex, int toIndex) :将a数组的[fromIndex, toIndex)部分按照升序排列
③static void sort(Object[] a) :根据元素的自然顺序对指定对象数组按升序进行排序。
④static <T> void sort(T[] a, Comparator<? super T> c) :根据指定比较器产生的顺序对指定对象数组进行排序。
c)二分查找
①static int binarySearch(int[] a, int key) 、static int binarySearch(Object[] a, Object key) :要求数组有序,在数组中查找key是否存在,如果存在返回第一次找到的下标,不存在返回负数。
d)数组的复制
①static int[] copyOf(int[] original, int newLength) :根据original原数组复制一个长度为newLength的新数组,并返回新数组
②static <T> T[] copyOf(T[] original,int newLength):根据original原数组复制一个长度为newLength的新数组,并返回新数组
③static int[] copyOfRange(int[] original, int from, int to) :复制original原数组的[from,to)构成新数组,并返回新数组
④static <T> T[] copyOfRange(T[] original,int from,int to):复制original原数组的[from,to)构成新数组,并返回新数组
e)比较两个数组是否相等
①static boolean equals(int[] a, int[] a2) :比较两个数组的长度、元素是否完全相同
②static boolean equals(Object[] a,Object[] a2):比较两个数组的长度、元素是否完全相同
f)填充数组
①static void fill(int[] a, int val) :用val值填充整个a数组
②static void fill(Object[] a,Object val):用val对象填充整个a数组
③static void fill(int[] a, int fromIndex, int toIndex, int val):将a数组[fromIndex,toIndex)部分填充为val值
④static void fill(Object[] a, int fromIndex, int toIndex, Object val) :将a数组[fromIndex,toIndex)部分填充为val对象
三、数组中的常见异常
1.数组角标越界异常
当访问数组元素时,下标指定超出[0, 数组名.length-1]的范围时,就会报数组下标越界异常:ArrayIndexOutOfBoundsException。
public class TestArrayIndexOutOfBoundsException { public static void main(String[] args) { int[] arr = {1,2,3}; // System.out.println("最后一个元素:" + arr[3]);//错误,下标越界 // System.out.println("最后一个元素:" + arr[arr.length]);//错误,下标越界 System.out.println("最后一个元素:" + arr[arr.length-1]);//对 } } |
分析:创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 ArrayIndexOutOfBoundsException
数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
2.空指针异常
观察以下代码,运行后会出现什么结果。
public class TestNullPointerException { System.out.println(arr[0][0]);//NullPointerException |
因为此时数组的每一行还未分配具体存储元素的空间,此时arr[0]是null,此时访问arr[0][0]会抛出NullPointerException
空指针异常。
空指针异常在内存图中的表现
小结:空指针异常情况
//举例一: // int[] arr1 = new int[10]; // arr1 = null; // System.out.println(arr1[9]); //举例二: // int[][] arr2 = new int[5][]; // //arr2[3] = new int[10]; // System.out.println(arr2[3][3]);//输出0 //举例三: String[] arr3 = new String[10]; System.out.println(arr3[2].toString()); |