ArrayList效率和大小

时间:2011-06-07 15:09:33

标签: java arraylist

我想明确一些事情: 使用arraylist时,它的大小为10个元素。如果需要自动增加,它会将整个arrayList重写为2/3更大。

如果我正在查看最终大小为50-120的列表,那么最好:

  1. 立即创建大小150并且有大量未使用的空间
  2. 允许列表自动增加几次?
  3. 由于

7 个答案:

答案 0 :(得分:10)

如果您知道ArrayList可能的最终大小,通常最好先预先指定它:

ArrayList myList = new ArrayList(150);

这可以节省ArrayList重新分配用于存储其内容的数组的性能影响(尽管对于您指定的数组大小,这种影响可以忽略不计)。

答案 1 :(得分:5)

它的计算密集度要小到你需要的那么大,但事实是java非常有效,所以没有必要担心arraylist如何增加。但是,如果要获得最大效率,那么是的,在创建列表时分配内存会更好。

答案 2 :(得分:2)

  

它将整个arrayList重写为2/3更大

<德尔>否。它使数组两次一样大(尽管确切的因素是未记录的实现细节)。我的观点已得到纠正。

  

如果我正在查看最终尺寸为50-120的列表,最好是:1。立即创建尺寸150

为什么是150?为什么不是120?

  
      
  1. 允许列表自动增加几次?
  2.   

在如此小的范围内,我会立即使用大尺寸。如果跨度更大(例如50-50000),我会保留最小的尺寸(或者可能是中间尺寸,取决于预期的值分布)并让它调整几次。

答案 3 :(得分:2)

是的,由于自动调整大小,预先指定大小更好。 ArrayList越大,它就越需要调整自身的大小。

答案 4 :(得分:1)

如果您大致知道最终尺寸,那么以该尺寸创建它会更有效。但是对于150的列表大小,这似乎是微优化。

答案 5 :(得分:1)

只要您不打算创建数百万个这样的列表,它实际上并不重要。复制数组数据非常快,并且使用分析器无法测量到达到50-120个项目的大小。但是,如果您知道列表最终会有此大小,我建议您在创建列表时使用此信息。

答案 6 :(得分:1)

你也可以使用Guava Lists.newArrayListWithExpectedSize的漂亮方法。

这是javadoc

  

创建一个适当大小的ArrayList实例,以保存估计数量的元素而不调整大小。如果估计值较低,则会添加少量填充。