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

Сложность времени для Java ArrayList

Является ли ArrayList массив или список в java? какова временная сложность операции get, это O(n) или O(1)?

4b9b3361

Ответ 1

An ArrayList в Java - это List, который поддерживается array.

Метод get(index) - это постоянное время, O(1), операция.

Код прямо из библиотеки Java для ArrayList.get(index):

public E get(int index) {
    RangeCheck(index);
    return (E) elementData[index];
}

В принципе, он просто возвращает значение прямо из массива поддержки. (RangeCheck(index)) также является постоянным временем)

Ответ 2

Реализация выполняется с помощью массива, а операция get - O (1).

javadoc говорит:

Размер, isEmpty, get, set,  итератор и операции listIterator выполняются в постоянных  время. Операция add работает в амортизированном постоянном времени,  т.е. для добавления n элементов требуется время O (n). Все остальные операции  работать в линейном времени (грубо говоря). Постоянный коэффициент низкий  к этому для реализации LinkedList.

Ответ 3

Как уже отмечалось, операции чтения - это постоянное время - O (1), но операции записи могут выходить из пространства в массиве резервных копий, перераспределять и копировать - чтобы он работал в O ( n) время, как гласит документ:

Размер, isEmpty, get, set, iterator, и операции listIterator выполняются в постоянное время. Выполняется операция добавления в амортизированном постоянном времени, то есть, добавление n элементов требует O (n) времени.Все остальные операции выполняются в линейное время (грубо говоря). постоянный коэффициент низкий по сравнению с что для LinkedList реализация.

На практике все O (1) после нескольких добавлений, так как массив поддержки удваивается каждый раз, когда его мощность исчерпана. Поэтому, если массив начинается с 16, он заполняется, он перераспределяется до 32, затем 64, 128 и т.д., Поэтому он масштабируется нормально, но GC может поражать во время большого realloc.

Ответ 4

Чтобы быть педантичным, это a List, поддерживаемый массивом. И да, сложность времени для get() равна O (1).

Ответ 5

Просто примечание.

Метод get(index) - это постоянное время, O(1)

Но это случай, если мы знаем индекс. Если мы попытаемся получить индекс с помощью indexOf(something), это будет стоить O(n)