Java List:初始大小

时间:2011-06-10 09:00:04

标签: java list optimization

哪种方式更适合初始化Java List:

  • new ArrayList<String>(futureSize)

  • new ArrayList<String>(futureSize + 1)

(为了防止列表的大小调整)

futureSize是填充后列表的未来大小。

注意:如果您要评论/回答有关“过早优化是......”的任何内容,“您应该......”,请不要。我正在寻找我的问题的答案,就是这样。

5 个答案:

答案 0 :(得分:4)

您可以从add(E e)和(类似方法)的实现中看到

public boolean add(E e) {
    ensureCapacity(size + 1);
    elementData[size++] = e;
    return true;
}

...如果你使用

,你不应该遇到麻烦(即内部数组没有调整大小)
new ArrayList<String>(futureSize)

答案 1 :(得分:3)

我说futureSize没问题,虽然我也认为你的应用程序的性能不会依赖于那个优化,除非你实际已经通过负载测试证明你的瓶颈是数组初始化。

如果你已经这样做了,那么尝试两种变体并比较结果要快得多。

答案 2 :(得分:2)

为什么不使用apache commons FixedSizeList类

这是链接: Apache Commons FizedSizeList

答案 3 :(得分:2)

引用javadoc:

  

ArrayList(int initialCapacity)

     

构造一个具有指定初始容量的空列表。

因此,futureSize应该是您使用的。简单明了。

答案 4 :(得分:0)

new ArrayList<String>(futureSize)

是更好的方法。 因为记忆不仅仅是需求,这不是一个好习惯。 关于列表是否重新调整大小是问题,然后找出调整大小的正确偏差使其像

new ArrayList<String>(futureSize+probableDeviation)

只插入1个元素不会解决问题,所以最好先使用第一个没有偏差。