Ответ
В стандартной реализации ArrayList в Java (OpenJDK) емкость увеличивается в 1.5 раза при необходимости расширения.
Как это работает:
При добавлении элемента, если внутренний массив заполнен, вызывается метод grow(). Новая емкость вычисляется по формуле:
int newCapacity = oldCapacity + (oldCapacity >> 1); // Эквивалентно oldCapacity * 1.5
Пример:
ArrayList<Integer> list = new ArrayList<>(10); // Начальная емкость = 10
// Добавляем 10 элементов (емкость заполнена)
// При попытке добавить 11-й элемент происходит расширение:
// Новая емкость = 10 + (10 >> 1) = 10 + 5 = 15
Почему именно 1.5? Это компромисс между:
- Производительностью: Уменьшает частые и дорогие операции копирования данных в новый массив.
- Памятью: Ограничивает избыточное выделение неиспользуемой памяти (в сравнении, например, с увеличением в 2 раза).