5 ответов:
An
ArrayListв Java-этоListчто подтверждаетсяarray.The
get(index)метод-это постоянное время,O(1), операция.код прямо из библиотеки Java для
ArrayList.get(index):public E get(int index) { RangeCheck(index); return (E) elementData[index]; }в принципе, он просто возвращает значение прямо из резервного массива. (
RangeCheck(index)) тоже постоянное время)
его реализация выполняется с массивом, а операция get-O (1).
документации javadoc говорит:
размер, isEmpty, get, set, итератор, и операции listIterator работать в постоянном время. Операция добавления выполняется в амортизированной постоянное время, то есть, добавление n элементов требует o(n) времени. Все остальные операции бегите в линейном времени (грубо говоря). Постоянный фактор низок по сравнению для класса LinkedList реализация.
как все уже указывали, операции чтения являются постоянным временем-O (1) но операции записи могут заканчиваться в резервном массиве, перераспределении и копировании-так что выполняется в O(n) времени, как говорит doc:
размер, пустой, получение итератора, и операции listIterator работать в постоянное время. операция добавления работает в амортизированном постоянном времени, то есть, добавление n элементов требует O (n) времени. Все другие операции выполняются линейное время (грубо говоря). Этот постоянным фактором является низкая по сравнению с что для класса LinkedList реализация.
на практике все O (1) после нескольких добавлений, так как резервный массив удваивается каждый раз, когда его емкость исчерпывается. Поэтому, если массив начинается с 16, заполняется, он перераспределяется до 32, затем 64, 128 и т. д. поэтому он масштабируется нормально, но GC может ударить во время большого перераспределения.
чтобы быть педантичным, это
Listподдерживается массивом. И да, временная сложность дляget()- Это O (1).
просто к сведению.
The
get(index)метод-это постоянное время,O(1)но это так, если мы знаем индекс. Если мы попытаемся получить индекс с помощью
indexOf(something), что будет стоитьO(n)
Comments