Изменение размера ArrayDeque

#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% при каждом изменении размера.