为什么java.util.Arrays中有一个ArrayList声明

在JDK 1.7中,有一个由asList使用的ArrayList声明。

为什么他们创建一个新的private static class而不使用java.util.ArrayList

 @SafeVarargs public static  List asList(T... a) { return new ArrayList(a); } /** * @serial include */ private static class ArrayList extends AbstractList implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { if (array==null) throw new NullPointerException(); a = array; } public int size() { return a.length; } public Object[] toArray() { return a.clone(); } public  T[] toArray(T[] a) { int size = size(); if (a.length < size) return Arrays.copyOf(this.a, size, (Class) a.getClass()); System.arraycopy(this.a, 0, a, 0, size); if (a.length > size) a[size] = null; return a; } public E get(int index) { return a[index]; } public E set(int index, E element) { E oldValue = a[index]; a[index] = element; return oldValue; } public int indexOf(Object o) { if (o==null) { for (int i=0; i<a.length; i++) if (a[i]==null) return i; } else { for (int i=0; i<a.length; i++) if (o.equals(a[i])) return i; } return -1; } public boolean contains(Object o) { return indexOf(o) != -1; } } 

因为Arrays.asList()返回的List 给定的数组支持 。 它包裹了那个数组; 对数组的更改将反映在List ,反之亦然。

此外,因此,此处返回的List具有固定大小。 因此,它不能是ArrayList因为ArrayList可以增长或缩小。

因为默认的ArrayList没有ArrayList(E[] array)构造函数。

因为它们在提供的数组周围提供了一个List包装器,它是O(1),而不是从数组中的元素构建一个ArrayList,即O(n)。

这会导致你出问题吗? 如果是这样,可能是因为当你应该使用List时,你将变量声明为ArrayList

asList(T... a)方法返回由指定数组支持的固定大小列表,该列表也应该是可序列化的并实现RandomAccess

java.util.ArrayList不符合此定义(固定大小),因此应使用另一种类型的java.util.List

如果你使用ArrayList,快速从Table中检索数据,因为它是基于索引的,我们想要快速检索数据,我们可以使用Arraylist ….

但是在删除记录时ArrayList并不快,因为重新排列索引更复杂

在我们想要更多删除记录的地方,我们可以使用LinkedList,它不是基于索引的

ArrayList声明

java.util.List中

ArrayList arrayList = new ArrayList();