Временная сложность для java ArrayList



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

733   5  

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

    Ничего не найдено.