#java #arrays #arraylist #arraydeque
#java #массивы #список массивов #arraydeque
Вопрос:
Цитата: Default initial capacity of ArrayDeque is 16. It will increase at a power of 2 (24, 25, 26 and so on) when size exceeds capacity.
Означает ли это, что он ведет себя аналогично ArrayList
? Каждый раз, когда размер превышает емкость, появляется новый массив, в который копируются старые элементы? Могу ли я сказать, что внутренняя реализация ArrayDequeue
и ArrayList
является массивом (как следует из их названия)? Отличается только изменение размера?
Ответ №1:
Да, ArrayDeque
ведет себя аналогично ArrayList
: внутренне он использует массив объектов. Если емкости недостаточно, создается новый массив большего размера и копируются элементы из старого массива в новый.
Спецификация Java API не требует какого-либо конкретного изменения размера. Фактически текущая реализация в OpenJDK удваивает размер массива, если он маленький (64), в противном случае он увеличивается на 50%:
// Double capacity if small; else grow by 50%
int jump = (oldCapacity < 64) ? (oldCapacity 2) : (oldCapacity >> 1);
Кажется, что поведение «удвоения» является приблизительным: благодаря » 2″ после первого изменения размера емкость равна 16 16 2 = 34. После второго изменения размера это 34 34 2 = 70. После этого массив увеличивается на 50% при каждом изменении размера.