Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: amortized, complexity, array, resize

Какая сложность вставки в конец ArrayList и от чего она зависит?

Вопрос проверяет понимание амортизированной сложности и внутреннего механизма расширения массива в ArrayList.

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

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

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

Чтобы корректно ответить на вопрос, важно различать единичную и амортизированную сложность.

Как работает вставка в конец

Операция:

list.add(value);

В обычном случае:

  1. Элемент записывается в следующий свободный индекс.

  2. Копирование данных не требуется.

Сложность:

  • O(1)

Когда сложность становится O(n)

Если внутренний массив заполнен:

  1. Создается новый массив большего размера.

  2. Все элементы копируются.

  3. Старый массив освобождается GC.

// упрощенно
newCapacity = oldCapacity * 1.5

Копирование:

  • O(n)

Почему в среднем это O(1)

Расширение:

  1. Происходит не при каждой вставке.

  2. Стоимость копирования «размазывается» по множеству операций.

Это и называется:

  • амортизированной сложностью O(1)

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

Вставка в конец ArrayList имеет амортизированную сложность O(1), но отдельные операции могут временно стоить O(n) из-за расширения массива.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • Java

    Java

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

#amortized

#complexity

#array

#resize

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