Подтвердить что ты не робот

Почему в 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;
    }
}
4b9b3361

Ответ 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();