[英]Filling ArrayList vs LinkedList
我一直在想LinkedList
填充速度比ArrayList
快。 据我所知, ArrayList
是基于长度有限(常数)的简单数组。 因此,每次阵列超出范围时,将创建具有更大范围的新阵列。 LinkedList
更简单。 它没有任何限制(内存除外),因此应该更快地填充它。 但是我运行下一个代码:
public static void main(String[] args) {
int length = 7000000;
List<Integer> list = new LinkedList<Integer>();
long oldTime = System.currentTimeMillis();
for (int i = 0; i < length; i++) {
list.add(i);
}
System.out.println("LinkedList fill: " + (System.currentTimeMillis() - oldTime));
list = new ArrayList<Integer>();
oldTime = System.currentTimeMillis();
for (int i = 0; i < length; i++) {
list.add(i);
}
System.out.println("ArrayList fill: " + (System.currentTimeMillis() - oldTime));
}
输出为:
LinkedList fill: 3936
ArrayList fill: 628
为什么这样?
您不能真正像Java那样对性能进行基准测试。 请参阅如何在Java中编写正确的微基准测试? 有关可能出问题的许多事情的更详细说明。
Benchmark Mode Samples Score Error Units
c.a.p.SO26404256.arrayList avgt 5 7.661 ± 0.672 ms/op
c.a.p.SO26404256.linkedList avgt 5 9.675 ± 1.213 ms/op
因此,填充LinkedList似乎比填充arrayList稍慢,但是区别远小于您的测试所示。
至于差异的原因,可能是因为LinkedList的每个元素都包装在Node
:这意味着更多的对象创建和更多的垃圾回收。 而且由于ArrayList中的数组副本而导致的损失可能比您想象的要少,因为它们已经过高度优化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.