Arrays

felix.shao2025-02-16

Arrays

简述

Arrays 简介

 Arrays 是一个工具类。其主要是方便对数组进行操作的,可以让我们在编程过程中轻松解决数组相关的问题,简化代码的开发。

详述

核心方法

 Arrays 同一个方法有不同类型的重载方法,主要以 int 类型相关的方法说明。

public class Arrays {

    private static final int MIN_ARRAY_SORT_GRAN = 1 << 13;

    /** 转不可变的 Arrays.ArrayList */
    public static <T> List<T> asList(T... a)...;

    /** 二分搜索 */
    public static int binarySearch(int[] a, int key)...;

    /** 拷贝数组,用了 System.copyOf 方法 */
    public static int[] copyOf(int[] original, int newLength)...;

    /** 比较引用数据的多维数组的各元素是否相等,调用 object.equals 的方法进行各元素的比较,Java 内置的八大基础数据类型不属于引用数据,故而没有 equals 方法,如果要比较基础数据类型的值是否相等,需要使用 Arrays.equals 方法 */
    public static boolean deepEquals(Object[] a1, Object[] a2)...;

     /** 返回基于指定数组的“深层内容”返回哈希码 */
    public static int deepHashCode(Object a[])...;

    /** 方法返回指定数组的“深层内容”的字符串表示形式 */
    public static String deepToString(Object[] a)...;

    /** 比较基本类型 int 的多维数组的各元素是否相等 */
    public static boolean equals(int[] a, int[] a2)...;

    /** 遍历数组,覆盖式填充数据为 val */
    public static void fill(int[] a, int val)...;

    /** 返回基本数据类型 int 数组的 hashCode */
    public static int hashCode(int a[])...;

    /** 并发计算。Java8 新增,有点像 spark 的 reduceByKey,即根据传入的方法一次计算 */
    public static void parallelPrefix(int[] array, int fromIndex,
                   int toIndex, IntBinaryOperator op)...;

    /** 并发设置值。相当于 stream.map 会挨个元素遍历执行方法 */
    public static void parallelSetAll(int[] array, IntUnaryOperator generator)...;

    /** 并发排序。 */
    public static void parallelSort(int[] a)...;

    /** 单线程计算。 */
    public static void setAll(int[] array, IntUnaryOperator generator)...;

    /** 单线程排序 */
    public static void sort(int[] a)...;

    /** 可拆分的迭代器。Java8 新增的,专门为并行设计的 */
    public static Spliterator.OfInt spliterator(int[] array)...;

    /** int 数据类型的流,可降低内存 */
    public static IntStream stream(int[] array)...;

    /** toString 方法 */
    public static String toString(int[] a)...;

}
asList

 该方法返回的是 Arrays.ArrayList 内部类对象,该对象不可修改,没有 add 方法,主要结构如下

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

private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable{
    private final E[] a;    

    ArrayList(E[] array) {
        a = Objects.requireNonNull(array);
    }

    public E get(int index)...;

    public E set(int index, E element)...;

    /** 没有提供对应的 add 与 remove 方法 */
    ...
    
}
如何设计不可变的 List?

 面试题,略。

Last Updated 2/18/2025, 2:43:17 PM
ON THIS PAGE