ArrayList容量增量方程

时间:2010-09-02 10:19:46

标签: java arraylist

在JDK 1.7到ArrayList.java中,方法ensureCapacity使用以下表达式增加数组容量:int newCapacity = oldCapacity + (oldCapacity >> 1)所以看起来新容量几乎比旧容量多50%

然而,在很多书中都说容量增加了一倍......因此书籍没有更新或我不太了解?

4 个答案:

答案 0 :(得分:5)

来自ArrayList javadoc

  

增长政策的细节是   没有指明超出事实   添加元素具有常量   摊销时间成本。

换句话说,这些书籍对于其他实现可能是准确的,但没有任何保证 - 并且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)