На какой структуре данных основана реализация LinkedList в Java?

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

Ответ

Двусвязный список. Каждый элемент (узел) хранит:

  • E item — данные.
  • Node<E> next — ссылку на следующий узел.
  • Node<E> prev — ссылку на предыдущий узел.

Внутренний класс узла:

private static class Node<E> {
    E item;
    Node<E> next;
    Node<E> prev;
    Node(Node<E> prev, E element, Node<E> next) {
        this.item = element;
        this.next = next;
        this.prev = prev;
    }
}
Сложность основных операций: Операция Сложность Примечание
Вставка/удаление в начале/конце O(1) Известны ссылки на head и tail.
Вставка/удаление по индексу O(n) Требуется линейный обход до позиции.
Получение элемента по индексу O(n) Линейный поиск.
Поиск по значению O(n) Линейный поиск.

Память: Занимает больше, чем ArrayList, из-за хранения двух дополнительных ссылок на каждый элемент.