Почему в java.util.Arrays есть объявление ArrayList
В JDK 1.7 существует объявление ArrayList
, которое используется asList
.
Почему они создали новый private static class
и не использовали java.util.ArrayList
:
@SafeVarargs
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
/**
* @serial include
*/
private static class ArrayList<E> extends AbstractList<E>
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> T[] toArray(T[] a) {
int size = size();
if (a.length < size)
return Arrays.copyOf(this.a, size,
(Class<? extends T[]>) 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;
}
}
Ответы
Ответ 1
Поскольку List
, возвращаемый Arrays.asList()
, поддерживается данным массивом. Он обертывает этот массив; изменения в массиве отражаются в List
и наоборот.
Кроме того, в результате этого возвращаемый здесь List
имеет фиксированный размер. Таким образом, это не может быть ArrayList
, потому что ArrayList
может расти или сокращаться.
Ответ 2
Поскольку по умолчанию ArrayList
не имеет конструктора ArrayList(E[] array)
.
Ответ 3
Поскольку они предоставляют оболочку List вокруг предоставленного массива, который является O (1), вместо того, чтобы создавать ArrayList из элементов в массиве, который является O (n).
Это вызывает у вас проблему? Если это так, возможно, потому, что вы объявляете свои переменные как ArrayList, когда вы должны использовать List
Ответ 4
Объявлено, что методы asList(T... a)
возвращают список фиксированного размера, поддерживаемый указанным массивом, который также должен быть сериализуемым и реализует RandomAccess
java.util.ArrayList
не подходит для этого определения (фиксированный размер), поэтому должен использоваться другой тип java.util.List
.
Ответ 5
если вы используете ArrayList, быстро извлекаете данные из таблицы, потому что они основаны на индексе,
где мы хотим быстро восстановить данные, мы можем использовать Arraylist....
Но ArrayList не ускоряется во время удаления записи, потому что перестановка индекса сложнее
Если мы хотим больше удалить запись, мы можем использовать LinkedList, не основанный на индексе
Объявление ArrayList
java.util.List
ArrayList arrayList = new ArrayList();