【发布时间】:2014-10-16 12:19:19
【问题描述】:
我一直认为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
为什么会这样?
【问题讨论】:
-
因为您的基准测试存在缺陷。 stackoverflow.com/questions/504103/…
-
您尝试交换它们吗?首先是arraylist,然后是linkedlist?
-
如果反之亦然,即先是 ArrayList,然后是 LL?还将长度传递给 ArrayList 构造函数,看看会发生什么?
-
没有任何变化。您可以在两个不同的程序中分别运行它们。
标签: java arraylist linked-list performance-testing microbenchmark