ArrayDeque 的大小调整

Resizing of 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?每次大小超过容量时,都会有新的 array 旧元素被复制到哪里?我可以说 ArrayDequeueArrayList 的内部实现是 array (正如他们的名字所说)吗?只是调整大小不同?

ArrayDeque 的行为类似于 ArrayList:在内部它使用对象数组。如果容量不够,它会创建一个新的更大的数组,并将旧数组中的项目复制到新数组中。

Java API 规范不要求任何特定的大小调整行为。实际上 OpenJDK 中的当前实现 doubles the size of the array if it's small (64), otherwise it grows by 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 .之后数组每次resize增加50%