Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: insertion, complexity

Какая сложность вставки элемента в середину ArrayList и LinkedList и почему она различается?

Вопрос проверяет понимание влияния структуры данных на стоимость операций вставки.

Короткий ответ

Вставка в середину ArrayList выполняется за O(n).
В LinkedList вставка элемента после нахождения позиции выполняется за O(1).
Однако поиск позиции в LinkedList тоже занимает O(n).
Итоговая сложность операций на практике сопоставима.
Разница заключается в копировании элементов и работе со ссылками.

Длинный ответ

Перед сравнением важно разделить операцию вставки на логические этапы.

Вставка в ArrayList

Процесс состоит из:

  1. Поиска индекса (O(1), если индекс известен).

  2. Сдвига всех элементов вправо.

  3. Записи нового значения.

Пример:

list.add(index, value);

Сдвиг элементов:

  • требует копирования

  • затрагивает до n / 2 элементов в среднем

Итог:

  • сложность O(n)

Вставка в LinkedList

Операция включает:

  1. Поиск нужного узла (O(n)).

  2. Перенастройку ссылок (O(1)).

list.add(index, value);

Если узел уже найден:

  • вставка происходит мгновенно

  • без копирования данных

Почему на практике разница небольшая

Важно учитывать:

  1. В LinkedList дорогой доступ к позиции.

  2. В ArrayList быстрый доступ, но дорогой сдвиг.

  3. Кэш-память процессора лучше работает с массивами.

Краткий вывод

Вставка в середину и ArrayList, и LinkedList в итоге имеет сложность O(n), но по разным причинам: сдвиг элементов против обхода списка.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Java

    Java

Ключевые слова

#insertion

#complexity

Подпишись на Java Developer в телеграм