Что верно про управление ёмкостью ArrayList?
Ёмкость растёт, но не уменьшается сама; clear() обнуляет ссылки, а массив остаётся прежнего размера. Пустой ArrayList без аргументов выделяет массив лениво — при первом добавлении (10).
- Известный размер — new ArrayList<>(n), нет промежуточных копирований
- После массового удаления — trimToSize(), если список живёт долго
- ensureCapacity — заранее перед пакетом добавлений
А ещё Огромный долгоживущий пустой список держит память
Подробно
Внутренний массив у пустого ArrayList ленивый — до первого добавления используется разделяемый пустой массив, и только затем выделяется место под ёмкость по умолчанию. Расти ёмкость умеет, а уменьшаться сама не станет: после удаления миллиона элементов массив останется прежнего размера, поэтому долгоживущий список, переживший пик, продолжит удерживать память — на этот случай есть trimToSize(). clear() проходит по элементам и обнуляет ссылки, чтобы объекты стали собираемыми, но сам массив сохраняет длину.
Что хотят услышать
- Ленивое выделение, рост, отсутствие уменьшения.
- Начальная ёмкость и trimToSize.
Частые ошибки
- Ожидать, что clear() вернёт память.
- Оставлять долгоживущий список раздутым после пиковой нагрузки.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Если размер известен заранее, стоит задать начальную ёмкость
- ✓После массового удаления ёмкость сама не уменьшается: нужен trimToSize()
- ✗clear() освобождает внутренний массив и возвращает ёмкость к нулю, как у только что созданного списка
- ✓Конструктор без аргументов откладывает выделение массива
Что спросят дальше
- Почему clear() обнуляет ссылки, а не просто ставит size = 0?
- Какова ёмкость по умолчанию и когда она выделяется?
Разбор темы
- ArrayList: динамический массив изнутри
Бэкенд-массив, рост в 1.5×, амортизированная O(1), стоимость вставки/удаления и когда массив лучше.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.