У меня есть вопрос о том, как Увеличение емкости ArrayList (не размер, а емкость) управляется в Java.Когда мы инициализируем ArrayList с помощью конструктора по умолчанию без установки емкости, емкость по умолчанию устанавливается равной 10.
В этот момент, когда мы добавляем еще один элемент в список, в документации Oracle говорится, что «Как элементыдобавляются в ArrayList, его емкость увеличивается автоматически. Детали политики роста не указываются, кроме того факта, что добавление элемента имеет постоянную амортизированную временную стоимость. "
Если мы посмотрим на внутренние компоненты Java, то политика увеличения емкостиизменил свою функцию.До Java 6 это было:
(1) int newCapacity = (oldCapacity * 3)/2 + 1;
Из Java 7 (и> 7) это:
(2) int newCapacity = oldCapacity + (oldCapacity >> 1);
, но эти две математические серии немного отличаются.Исходя из значения по умолчанию (10) имеем:
(1) 10,16,25,38,58,88,133,200,301,452 ...
(2) 10,15,22,33, 49,73,109,163,244,366 ...
Я думаю, что это никак не влияет на использование ArrayList, но почему они изменили эту функцию?Есть ли причина производительности?Они нашли дефект или ошибку в старом?