Что важно знать
ArrayList— массив, растёт в 1,5 раза; доступ O(1), вставка в середину O(n) из-за сдвига.LinkedList— двусвязный список; доступ O(n), плохая локальность памяти.- Начальная ёмкость при известном размере экономит копирования.
Динамический массив и связный список изнутри, сложность операций и выбор.
ArrayList — массив, растёт в 1,5 раза; доступ O(1), вставка в середину O(n) из-за сдвига.LinkedList — двусвязный список; доступ O(n), плохая локальность памяти.Практика. Реализовать свой динамический массив с ростом и сравнить скорость с ArrayList.
Практика. Замерить JMH вставку в середину ArrayList и LinkedList на разных размерах и объяснить результат.
O(n): хвост сдвигается влево через System.arraycopy, последняя ячейка обнуляется. Удаление в цикле — квадратичная работа.
ArrayList — динамический массив: доступ по индексу O(1), добавление в конец амортизированно O(1). LinkedList — двусвязный список: O(1) только при вставке или удалении у уже…
Ёмкость растёт в 1,5 раза: копирования всё реже, сумма копирований на n вставок — геометрическая прогрессия, то есть O(n). На одну вставку — константа в среднем, хотя отдельная…
В основе — массив, который при заполнении заменяется большим с копированием элементов (примерно в 1,5 раза).
O(n): произвольного доступа нет, до позиции нужно дойти по ссылкам (JDK начинает с ближнего конца).
Ёмкость растёт, но не уменьшается сама; clear() обнуляет ссылки, а массив остаётся прежнего размера. Пустой ArrayList без аргументов выделяет массив лениво — при первом добавлении…
Бэкенд-массив, рост в 1.5×, амортизированная O(1), стоимость вставки/удаления и когда массив лучше.
Двусвязные узлы, реальная стоимость операций, cache locality и почему ArrayList/ArrayDeque почти всегда лучше.
На живом собеседовании sotto слышит вопрос интервьюера и показывает короткий ответ и план. Оставьте контакт — пришлём доступ и промокод.