Arrays类常用方法

binarySearch

对排好序的数组进行二分法查找

int[] arr = {32,2,3,543};

Arrays.sort(arr); // 2,3,32,543

int n = Arrays.binarySearch(arr, 3);
System.out.println(n);  // 1

copyOf copyOfRange

copyOf拷贝数组

public static int[] copyOf(int[] original, int newLength)

第二个参数是新数组的长度。这个方法通常用来增加数组的大小

int[] copyArr = Arrays.copyOf(arr1, arr1.length*2);

如果数组元素是数值型,那么额外的元素将被赋值为0;如果数组元素是布尔型,则将赋值为false。相反,如果长度小于原始数组的长度,就只会拷贝前面的。

copyOfRange可是指定从一段范围来复制,而不一定是从头开始复制。

public static <T> T[] copyOfRange(T[] original,
    int from,
    int to)

首先看直接复值带来的问题

int[] arr = {2,3,5,6}; 
int[] arr2 = arr;   

arr2[0] = 100; // now arr[0] is also 100;
System.out.println(arr[0]); 

使用copyOf拷贝整个数组

int[] arr = {2,3,5,6}; 
int[] arr2 = Arrays.copyOf(arr, arr.length);    

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

toString

遍历一维数组,该方法是一个非常方便的调式方法。

int[] arr = {32,2,3,543};

System.out.println(Arrays.toString(arr));   
// [32, 2, 3, 543]

deepToString

该方法可以用来遍历多维数组。

public static void main (String[] args) {
    int[][] arrs = {
        {32,2,3,543},
        {3,23,43,23},
        {123,3,24,6}
    };

    System.out.println(Arrays.deepToString(arrs));  
    // [[32, 2, 3, 543], [3, 23, 43, 23], [123, 3, 24, 6]]
}

equals

bool equals(arr1, arr2);

在java中,判断两个数组是否相等,需要使用Arrays.equals方法,而不能使用“==”。(String的比较也是一样)

int[] arr1 = {32,23,43};
int[] arr2 = {32,23,43};

if (Arrays.equals(arr1, arr2)) {
    System.out.println(1);
}

fill

用指定值来填充数组 void Arrays.fill(数组, 填充值)

public static void main (String[] args) {
    String[] strs = new String[5];
    System.out.println(Arrays.toString(strs));
    // [null, null, null, null, null]

    Arrays.fill(strs, "");
    System.out.println(Arrays.toString(strs));
    // [, , , , ]
}

sort

采用优化后的快速排序算法对数组排序;该方法不能对字符串数组进行排序。

int[] arr = {32,2,3,543};

Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
// [2, 3, 32, 543]