我想知道是否有人知道Java 1.6中ArrayList的增长政策? java doc说
除了添加元素具有不变的摊余时间成本这一事实之外,未指定增长政策的详细信息。
但我只是想知道细节,因为我知道我的目标是开始但是我想确保我的初始尺寸足够大,不会导致立即调整大小。我知道使用HashMap你可以设置一个负载因子在背景中发生了类似的事情吗?还是在太空出来的时候它总是在增长?
答案 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中的源代码