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 旧元素被复制到哪里?我可以说 ArrayDequeue
和 ArrayList
的内部实现是 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%
引用: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 旧元素被复制到哪里?我可以说 ArrayDequeue
和 ArrayList
的内部实现是 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%