【发布时间】:2012-03-20 03:44:43
【问题描述】:
所以几乎每个与 ArrayList 中容量相关的问题都是如何使用它或(奇怪地)访问它,我对这些信息非常熟悉。如果您碰巧知道或大致了解 ArrayList 中有多少项目,我感兴趣的是是否真的值得使用设置容量的 ArrayList 构造函数?
是否有任何全面的基准来比较将元素简单地添加到 ArrayList 与预先设置 ArrayList 的容量需要多长时间?
【问题讨论】:
-
当 ArrayList 的容量达到时,CLR 会创建一个新的 ArrayList,其容量是原数组的两倍,并将原数组中的所有元素复制到新创建的数组中。因此,如果您对所需的大小有一些想法,可以通过预设 ArrayList 的大小来节省这些额外的工作。
-
@Deepansh:这不是 Java 问题吗? CLR 是如何出现的?我猜你的意思是JVM?此外,您的描述似乎是正确的,但“在 CLR”(.Net)中,我预先分配大小需要更多时间。至少,当我在 1000000 个项目上测试它时会发生这种情况。我测试了 10-15 次,每次默认的 ArrayList 构造函数都赢了!
-
我说的是 ArrayList,但它可以应用于一般概念,即拥有由数组内部支持的集合的列表视图。
-
对不起 Anthony,因为 ArrayList 也存在于 .net 中,所以我忽略了 java 标签。但我认为 .net 和 java 中的概念是相同的。
-
@DeepanshGupta 'The details of the growth policy are not specified' for
ArrayList但实际上 JDK 使用的增长因子是 1.5,而不是 2。
标签: java arraylist benchmarking