为什么要使用ArrayList(int capacity)呢?

Mav*_*ick 5 java benchmarking arraylist

所以与ArrayList中的容量相关的每个问题都是如何使用它或(奇怪地)访问它,我对这些信息非常熟悉.我感兴趣的是,如果您碰巧知道或者大致了解ArrayList中有多少项,那么是否真的值得使用设置容量的ArrayList构造函数?

是否有任何全面的基准测试比较使用天然添加元素到ArrayList所需的时间与预先设置ArrayList的容量相比?

rua*_*akh 6

显然,对于任何特定的应用程序,您必须测试任何性能调整以确定它们是否实际上是优化(并且如果它们实际上是必要的),但有时候明确设置容量是值得的.例如:

  • 您正在创建大量的数组列表,其中大部分都非常小.在这种情况下,您可能希望将初始容量设置得非常低,和/或在填充给定数组时调整容量.(在这种情况下,优化不是速度问题而是内存使用问题.但请注意,列表本身具有内存开销,它包含的数组也是如此,所以在这种情况下,重新设计这样的情况可能会更好.一种减少列表的方法.)
  • 您正在创建一个非常大的已知大小的数组列表,并且您希望将每个元素添加到非常小的时间(可能因为每次添加元素时,您都必须向外部数据源发送一些响应).(默认的几何增长需要摊销的固定时间:每隔一段时间就会产生一次巨大的惩罚,这样整体平均表现就完全没问题了,但是如果你关心单独进行单独插入,那可能就不够好了.)