Что произойдет при добавлении 11-го элемента в ArrayList с начальной емкостью 10?

«Что произойдет при добавлении 11-го элемента в ArrayList с начальной емкостью 10?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Произойдет автоматическое расширение (resize) внутреннего массива. Механизм увеличения емкости:

  • Формула: новая_емкость = старая_емкость + (старая_емкость >> 1) (увеличение примерно в 1.5 раза).
  • Процесс:
    1. Создается новый массив большего размера (в данном случае 15).
    2. Все элементы копируются из старого массива в новый.
    3. Старый массив становится доступным для сборки мусора.

Пример:

ArrayList<Integer> list = new ArrayList<>(10); // Начальная емкость = 10
for (int i = 0; i < 11; i++) {
    list.add(i); // При i=10 (11-й элемент) произойдет resize
}
System.out.println("Размер: " + list.size()); // 11
// Внутренняя емкость теперь 15

Этот процесс прозрачен для разработчика, но может повлиять на производительность при частых добавлениях.