Java常用类:Arrays类

时间:2020-11-10 16:54:00 来源:互联网 作者: 神秘的大神 字体:


一、简介

全类名:java.util.Arrays

描述:

  • 此类包含用来操作数组(比如排序和搜索)的各种方法。
  • 此类还包含一个允许将数组作为列表来查看的静态工厂

注意:

  • 除非特别注明,否则如果指定数组引用为'null',则此类中的方法都会抛出'NullPointerException'
  • Arrays类中的方法都是'static'修饰的静态方法,在使用的时候可以直接使用类名进行调用,而'不用'使用对象来调用(注意:是'不用'而不是'不能')。




二、常用方法

Ⅰ、打印数组

方法:

  • toString(Object[] a):将数组对象的内容转换转换成字符串。
  • deepToString(Object[] a):可以将多维数组对象的内容转换转换成字符串。

示例:

public static void main(String[] args) {
    int[][] arrayObject = {{1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 6}};
    System.out.println(Arrays.toString(arrayObject));//[[I@5674cd4d, [I@63961c42, [I@65b54208, [I@1be6f5c3, [I@6b884d57]
    System.out.println(Arrays.deepToString(arrayObject));//[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
}




Ⅱ、数组元素排序

方法:

  • sort(Object[] a):将数组对象的元素按升序排序,排序规则依据该种元素的类在实现Comparable接口的compareTo方法时的实现逻辑
  • sort(T[] a, Comparator<? super T> c):将数组对象的元素按照自定义的排序规则进行排序,排序规则通过传入一个自定义的Comparator接口的实现类对象参数来指定。

示例:

public static void main(String[] args) {
    int[] intArr = {1, 5, 3, 2, 4};
    Arrays.sort(intArr);
    System.out.println(Arrays.toString(intArr));//[1, 2, 3, 4, 5]
    int[][] arrayObject = {{1, 2}, {1}, {1, 2, 3, 4}, {1, 2, 3}, {3, 4}};
    /*
    根据内层数组的长度对二维数组的内层数组进行排序。
    匿名内部类可以用Lambda表达式简化为:(o1, o2) -> Integer.compare(o1.length, o2.length)
    或者替换为:Comparator.comparingInt(o -> o.length)
    */
    Arrays.sort(arrayObject, new Comparator<int[]>() {
        @Override
        public int compare(int[] o1, int[] o2) {
            return Integer.compare(o1.length, o2.length);
        }
    });
    System.out.println(Arrays.deepToString(arrayObject));//[[1], [1, 2], [3, 4], [1, 2, 3], [1, 2, 3, 4]]
}




Ⅲ、二分法查找元素

方法:

  • binarySearch(Object[] a, Object key):用二分查找算法在给定数组中搜索给定值的对象,若存在则返回其下标,若不存在则返回负数。

注意:

  • 必须在调用binarySearch方法之前先对数组进行排序(通过sort方法等),如果没有对数组进行排序,则结果是不确定的。
  • 如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。

示例:

public static void main(String[] args) {
    int[] intArr = {1, 5, 3, 2, 4};
    /* 必须在调用binarySearch方法之前先对数组进行排序 */
    Arrays.sort(intArr);
    System.out.println(Arrays.binarySearch(intArr, 3));//2
}




Ⅳ、填充元素

方法:

  • fill(Object[] a, Object val):将数组的所有元素用指定的值进行替换

  • fill(Object[] a, int fromIndex, int toIndex, Object val):将数组的指定起始下标到指定截止下标前的所有元素用指定的值进行替换。起始下标的元素会被替换,截止下标的元素不会被替换。

示例:

public static void main(String[] args) {
    int[] intArr = {1, 5, 3, 2, 4};
    Arrays.fill(intArr, 1, 3, 6);
    System.out.println(Arrays.toString(intArr));//[1, 6, 6, 2, 4]
    Arrays.fill(intArr, 7);
    System.out.println(Arrays.toString(intArr));//[7, 7, 7, 7, 7]
}




Ⅴ、数组转换List

方法:

  • asList(T... a):将一组同类型的参数转换为List(ArrayList)集合。

示例:

public static void main(String[] args) {
    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
    /* List集合转数组 */
    Integer[] array = list.toArray(new Integer[0]);
    System.out.println(Arrays.toString(array));//[1, 2, 3, 4, 5]
}