ArrayList容量增量方程

xde*_*000 4 java arraylist

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

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

Jon*_*eet 5

来自ArrayListjavadoc:

除了添加元素具有恒定的摊销时间成本这一事实之外,未指定增长策略的详细信息.

换句话说,这些书籍对于其他实现可能是准确的,但没有任何保证 - 并且Java 7源代码仍然符合文档,但显示书籍过于具体.


Jon*_*man 5

你的理解是正确的,newCapacity比oldCapacity多50%

在Java 6中,newCapacity计算为

int newCapacity = (oldCapacity * 3)/2 + 1;
Run Code Online (Sandbox Code Playgroud)

这是Java等开源语言的美妙之处,您可以看到实现 - 如果它不符合您的要求,您可以实现自己的.