Arrays
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?
面试题,略。