我想明确一些事情: 使用arraylist时,它的大小为10个元素。如果需要自动增加,它会将整个arrayList重写为2/3更大。
如果我正在查看最终大小为50-120的列表,那么最好:
由于
答案 0 :(得分:10)
如果您知道ArrayList
可能的最终大小,通常最好先预先指定它:
ArrayList myList = new ArrayList(150);
这可以节省ArrayList
重新分配用于存储其内容的数组的性能影响(尽管对于您指定的数组大小,这种影响可以忽略不计)。
答案 1 :(得分:5)
它的计算密集度要小到你需要的那么大,但事实是java非常有效,所以没有必要担心arraylist如何增加。但是,如果要获得最大效率,那么是的,在创建列表时分配内存会更好。
答案 2 :(得分:2)
它将整个arrayList重写为2/3更大
<德尔>否。它使数组两次一样大(尽管确切的因素是未记录的实现细节)。我的观点已得到纠正。
如果我正在查看最终尺寸为50-120的列表,最好是:1。立即创建尺寸150
为什么是150?为什么不是120?
- 允许列表自动增加几次?
醇>
在如此小的范围内,我会立即使用大尺寸。如果跨度更大(例如50-50000),我会保留最小的尺寸(或者可能是中间尺寸,取决于预期的值分布)并让它调整几次。
答案 3 :(得分:2)
是的,由于自动调整大小,预先指定大小更好。 ArrayList
越大,它就越需要调整自身的大小。
答案 4 :(得分:1)
如果您大致知道最终尺寸,那么以该尺寸创建它会更有效。但是对于150的列表大小,这似乎是微优化。
答案 5 :(得分:1)
只要您不打算创建数百万个这样的列表,它实际上并不重要。复制数组数据非常快,并且使用分析器无法测量到达到50-120个项目的大小。但是,如果您知道列表最终会有此大小,我建议您在创建列表时使用此信息。
答案 6 :(得分:1)
你也可以使用Guava Lists.newArrayListWithExpectedSize的漂亮方法。
这是javadoc
创建一个适当大小的ArrayList实例,以保存估计数量的元素而不调整大小。如果估计值较低,则会添加少量填充。