在JDK 1.7到ArrayList.java中,方法ensureCapacity
使用以下表达式增加数组容量:int newCapacity = oldCapacity + (oldCapacity >> 1)
所以看起来新容量几乎比旧容量多50%
然而,在很多书中都说容量增加了一倍......因此书籍没有更新或我不太了解?
答案 0 :(得分:5)
增长政策的细节是 没有指明超出事实 添加元素具有常量 摊销时间成本。
换句话说,这些书籍对于其他实现可能是准确的,但没有任何保证 - 并且Java 7源代码仍然符合文档,但显示书籍过于具体。
答案 1 :(得分:5)
您的理解是正确的,newCapacity比oldCapacity多50%
在Java 6中,newCapacity计算为
int newCapacity = (oldCapacity * 3)/2 + 1;
这是Java等开源语言的美妙之处,您可以看到实现 - 如果它不符合您的要求,您可以实现自己的。
答案 2 :(得分:1)
Java中的ArrayLists将容量增加50%。但是,Java中的向量类(其功能与ArrayLists类似,但提供同步)将使容量增加一倍。这可能是你书中的混乱来自的地方。
答案 3 :(得分:0)
在 Java 6 中,newCapacity计算为=> int newCapacity =(oldCapacity * 3)/ 2 +1;
在 Java 7 中,newCapacity的计算公式为=> int newCapacity = oldCapacity +(oldCapacity >> 1)