Зависит ли временная сложность операции add() в LinkedList от количества элементов?

«Зависит ли временная сложность операции add() в LinkedList от количества элементов?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, зависит от позиции вставки.

LinkedList — это двусвязный список, поэтому время доступа к элементу по индексу линейное.

  • add(E element) / addLast(E element) – вставка в конец: O(1). Список хранит ссылку на tail.
  • addFirst(E element) – вставка в начало: O(1). Список хранит ссылку на head.
  • add(int index, E element) – вставка по индексу (в середину): O(n). Требуется пройти от head или tail до нужной позиции.

Сравнение на примере:

LinkedList<String> list = new LinkedList<>();
list.add("End");       // O(1) - в конец
list.addFirst("Start"); // O(1) - в начало
list.add(1, "Middle"); // O(n) - обход до 1-го индекса (n=2 в этот момент)

Выбор коллекции:

  • Используйте LinkedList для частых вставок/удалений в начале или конце списка.
  • Используйте ArrayList для частого доступа по индексу (get/set) или добавления в конец (амортизированно O(1)).