Получить доступ

Что верно про управление ёмкостью ArrayList?

MiddleКоллекции
Коротко

Ёмкость растёт, но не уменьшается сама; clear() обнуляет ссылки, а массив остаётся прежнего размера. Пустой ArrayList без аргументов выделяет массив лениво — при первом добавлении (10).

  • Известный размер — new ArrayList<>(n), нет промежуточных копирований
  • После массового удаления — trimToSize(), если список живёт долго
  • ensureCapacity — заранее перед пакетом добавлений

А ещё Огромный долгоживущий пустой список держит память

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Попробуйте сами

Сколько раз ArrayList копирует массив

Подробно

Внутренний массив у пустого ArrayList ленивый — до первого добавления используется разделяемый пустой массив, и только затем выделяется место под ёмкость по умолчанию. Расти ёмкость умеет, а уменьшаться сама не станет: после удаления миллиона элементов массив останется прежнего размера, поэтому долгоживущий список, переживший пик, продолжит удерживать память — на этот случай есть trimToSize(). clear() проходит по элементам и обнуляет ссылки, чтобы объекты стали собираемыми, но сам массив сохраняет длину.

Что хотят услышать

  • Ленивое выделение, рост, отсутствие уменьшения.
  • Начальная ёмкость и trimToSize.

Частые ошибки

  • Ожидать, что clear() вернёт память.
  • Оставлять долгоживущий список раздутым после пиковой нагрузки.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Если размер известен заранее, начальную ёмкость стоит задать конструктором — это избавляет от серии расширений
  • ✓После массового удаления ёмкость сама не уменьшается: нужен trimToSize()
  • ✓Список, созданный конструктором без аргументов, откладывает выделение массива до первого добавления
  • ✗clear() освобождает внутренний массив и возвращает ёмкость к нулю

Что спросят дальше

  • Почему clear() обнуляет ссылки, а не просто ставит size = 0?
  • Какова ёмкость по умолчанию и когда она выделяется?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем