Arrays小结(3)Arrays类方法及数组异常

92 阅读4分钟

Array工具的使用

使用时应与应用Scanner类一样输入导包。

import java.util.Arrays;

(VScode没有自动输入导包的功能。)

 

数组元素拼接 ** Arrays.toString(arr)

– static String toString(int[] a) :字符串表示形式由数组的元素列表组成,括在方括号("[]")中。相邻元素用字符 ", "(逗号加空格)分隔。形式为:[元素1,元素2,元素3...]

– static String toString(Object[] a) :字符串表示形式由数组的元素列表组成,括在方括号("[]")中。相邻元素用字符 ", "(逗号加空格)分隔。元素将自动调用自己从Object继承的toString方法将对象转为字符串进行拼接,如果没有重写,则返回类型@hash值,如果重写则按重写返回的字符串进行拼接。

System.out.println(Arrays.toString(arr));    //[1,2,3,4,5]

• 此种类方法常用于将数组转换为字符串的表现形式。

• 输出时能够连续地输出数组的内容。

 

数组排序 Arrays.sort(arr)**

输入需要排序的数组,则自动实现升序排序。******

– static void sort(int[] a) :将a数组按照从小到大进行排序

– static void sort(int[] a, int fromIndex, int toIndex) :将a数组的[fromIndex, toIndex)部分按照升序排列

– static void sort(Object[] a) :根据元素的自然顺序对指定对象数组按升序进行排序。

– static  void sort(T[] a, Comparator<? super T> c) :根据指定比较器产生的顺序对指定对象数组进行排序。

int []arr3={13,15,28,64,39,47};

        Arrays.sort(arr3);

        System.out.println(Arrays.toString(arr3));

//[13, 15, 28, 39, 47, 64]

 

数组元素的二分查找 Arrays.binarySearch(array,number)**

Number为需要查找的特定数组元素,如果查找到该数组元素,返回该元素的下标。******

– static int binarySearch(int[] a, int key) 、static int binarySearch(Object[] a, Object key) :要求数组有序,在数组中查找key是否存在,如果存在返回第一次找到的下标,不存在返回负数。

int []arr2={1,2,3,4,5};

int index = Arrays.binarySearch(arr2,3);

        System.out.println("the index of 3 is "+index);  

//the index of 3 ia 2

 

数组的复制 (1) Arrays.copyOf(arr,number)**

number为需要复制的数组的属性(长度)。******

此种复制类方法只能实现顺序的元素复制。******

(2)******

Arrays.copyOfRange(arr,number1,number2)******

Number1为开始复制的数组元素的下标(包含在复制内容中),number2为结束复制的数组元素的下标(不包含在复制内容中)。******

此种复制类方法可以实现一定范围内的元素复制。******

– static int[] copyOf(int[] original, int newLength) :根据original原数组复制一个长度为newLength的新数组,并返回新数组

– static  T[] copyOf(T[] original,int newLength):根据original原数组复制一个长度为newLength的新数组,并返回新数组

– static int[] copyOfRange(int[] original, int from, int to) :复制original原数组的[from,to)构成新数组,并返回新数组

– static  T[] copyOfRange(T[] original,int from,int to):复制original原数组的[from,to)构成新数组,并返回新数组

比较两个数组是否相等 Array.equals(arr1,arr2)**

填入需要检查是否相等的两个数组。******

– static boolean equals(int[] a, int[] a2) :比较两个数组的长度、元素是否完全相同

– static boolean equals(Object[] a,Object[] a2):比较两个数组的长度、元素是否完全相同

int []arr={1,2,3,4,5};

boolean isEquals = Arrays.equals(arr,arr2);    //true;

• 

填充数组 :   Array.fill(arr,number)******

(number 为想要 填充近数组的数)******

– 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对象

 int []arr={1,2,3,4,5};

Arrays.fill(arr,10);

 

 

 

Array常见异常****

6.1角标越界

报错时出现以下内容:

ArrayIndexOutOfBoundsException。

有时扩容、缩容需要覆盖元素,例如arr[i]-arr[i+1] 此时遍历的for循环终止条件应为i<arr.length-1,否则arr[i+1]会取值到arr[arr.length],出现角标越界的情况。

 

6.2 空指针异常

public class TestNullPointerException {

*    public static void main(String[] args) {*
*         //定义数组*
*        int[][] arr = new int[3][];*
**
*        System.out.println(arr[0][0]); //NullPointerException*
*    }*
}*

因为此时数组的每一行还未分配具体存储元素的空间,此时arr[0]是null,此时访问arr[0][0]会抛出NullPointerException 空指针异常。

空指针异常情况

Example 1:*
****int[] arr1 = new int[10];
****arr1 = null;
****System.out.println(arr1[9]);
*

example 2;*
****int[][] arr2 = new int[5][];
**arr2[3] = new int[10];
***System.out.println(arr2[3][3]);

example 3:*
String[] arr3 = new String[10];
*System.out.println(arr3[2].toString());