Ответ о влиянии коэффициента изменения размера на амортизированную стоимость и асимптотику c сложность см. в этом ответе .
Позвольте мне напасть на это с другой, более практичной точки зрения.
Разработчики стандартной библиотеки должны найти хорошее поведение по умолчанию, которое работает для очень широкого диапазона общих рабочих нагрузок. Иногда, после долгих размышлений и сравнительного анализа, они меняют эти вещи (см. Подробности реализации для HashMap или String). Всегда есть компромисс, и вы не можете получить его абсолютно правильно для каждого варианта использования.
Если вы обнаружите, что поведение по умолчанию не работает для вас, вы, как разработчик приложения, можете и обязаны настроить значения по умолчанию.
В данном случае, если вы уже знаете, что ваш ArrayList будет нуждаться в увеличении сверх начальной емкости по умолчанию, вы можете сказать конструктору предварительно выделить больший. Позже вы также можете позвонить ensureCapacity
и trimToSize
, чтобы настроить его.