Java 6SE中ArrayList的增长策略

时间:2009-12-28 20:49:04

标签: java optimization arraylist

我想知道是否有人知道Java 1.6中ArrayList的增长政策? java doc说

  

除了添加元素具有不变的摊余时间成本这一事实之外,未指定增长政策的详细信息。

但我只是想知道细节,因为我知道我的目标是开始但是我想确保我的初始尺寸足够大,不会导致立即调整大小。我知道使用HashMap你可以设置一个负载因子在背景中发生了类似的事情吗?还是在太空出来的时候它总是在增长?

4 个答案:

答案 0 :(得分:6)

ArrayList不需要loadFactor,因为它在100%填充时总是会增长,因此您可以使用您事先知道的大小创建它,如果稍后填充那么多元素,它就不会增长。另一方面,Hashtables的填充越多,效率越低,因此您可以使用loadFactor调整性能和浪费空间之间的传递,但对于像ArrayList这样的可扩展数组,情况并非如此。

答案 1 :(得分:3)

这是我在查看ensureCapacity的来源时看到的内容:


    int newCapacity = (oldCapacity * 3)/2 + 1;

答案 2 :(得分:-1)

您可以自己阅读来源。 Sun JDK的每个副本都附带一个包含源的src.zip。

答案 3 :(得分:-1)

int newCapacity = oldCapacity +(oldCapacity>> 1);

增量为50%。

如果有100个元素,那么ensureCapacityInternal()将增加到150的大小。

请检查JDK 7中的源代码