欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java源码之Arrays

程序员文章站 2022-03-11 21:59:24
...

简介

Arrays主要是对数组类型操作。包括排序查找元素比较复制转化为List获取hashCodetoString方法


排序

-sort

1.排序后为升序
2.数组元素类型为基本类型,可以调用对应的重载方法排序
3.若数组元素类型为对象,在如下情况可以调用sort方法排序
(1) 该类实现了 Comparable接口
(2) 实现比较器接口Comparator
—>Java 中 Comparable 和 Comparator 比较


查找元素

-binarySearch

使用了二分查找对数组中的元素进行查找。
注意
1.调用该方法前确保数组已经排好序
2.若要查找的元素在数组中有多个则只返回其中一个的索引。
—>Java实现二分查找


比较

-equals

结果为true的条件
1.参数都为null
2.数组长度相等对应位置的元素相等

-deepEquals

用于比较嵌套数组


复制

-copyOf(T[] original, int newLength)

copyOf 从原数组索引为0处开始复制, 若newLength的值大于原数组长度,则以默认值填充。

int[] a = {3, 1, 2};
int[] b = Arrays.copyOf(a , 4);
System.out.println(Arrays.toString(b));// [3, 1, 2, 0]

-copyOfRange(T[] original, int from, int to)

copyOfRange 可以决定复制的区间,区间为[from, to)

int[] a = {3, 1, 2};
int[] b2 = Arrays.copyOfRange(a, 0, 2);
System.out.println(Arrays.toString(b2));// [3, 1]

将数组转化为List

-asList(T… a)

//源码
public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

获取hashCode

hashCode

计算数组的哈希值

deepHashCode(Object a[])

计算数组元素为数组的哈希值。从源码可看到,该方法进行了递归调用,核心方法还是hashCode。

// 源码
public static int deepHashCode(Object a[]) {
        if (a == null)
            return 0;

        int result = 1;

        for (Object element : a) {
            int elementHash = 0;
            if (element instanceof Object[])
                elementHash = deepHashCode((Object[]) element); //递归调用
            else if (element instanceof byte[])
                elementHash = hashCode((byte[]) element);
            else if (element instanceof short[])
                elementHash = hashCode((short[]) element);
            else if (element instanceof int[])
                elementHash = hashCode((int[]) element);
            else if (element instanceof long[])
                elementHash = hashCode((long[]) element);
            else if (element instanceof char[])
                elementHash = hashCode((char[]) element);
            else if (element instanceof float[])
                elementHash = hashCode((float[]) element);
            else if (element instanceof double[])
                elementHash = hashCode((double[]) element);
            else if (element instanceof boolean[])
                elementHash = hashCode((boolean[]) element);
            else if (element != null)
                elementHash = element.hashCode();

            result = 31 * result + elementHash;
        }

        return result;
    }

toString方法

-toString

-deepToString

打印嵌套数组的String形式

int[] a = {3, 1, 2};
int[] a1 = {3, 1, 2};
int[][] b1 = {a, a1};

System.out.println(Arrays.toString(a1)); // [3, 1, 2]
System.out.println(Arrays.deepToString(b1)); // [[3, 1, 2], [3, 1, 2]]
相关标签: Arrays