【发布时间】:2014-05-15 17:33:05
【问题描述】:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class CompareList {
public static void main(String[] args) {
List<Integer> ArrayList = new ArrayList<Integer>();
List<Integer> LinkedList = new LinkedList<Integer>();
doCalculations("ArrayList",ArrayList);
doCalculations("LinkedList",LinkedList);
}
private static void doCalculations(String type,List<Integer> List){
for(int i=0;i<1E5;i++){
List.add(i);
}
Long start = System.currentTimeMillis();
/*
To add elements in the end
for(int i=0;i<1E5;i++){
List.add(i);
}
*/
for(int i=0;i<1E5;i++){
List.add(0,i);
}
Long end = System.currentTimeMillis();
System.out.println("time taken" +" "+ (end-start) + "ms for" +" "+ type);
}
}
ArrayList 耗时 13ms LinkedList 耗时 64ms
我知道这是重复的问题,但请不要删除它,无论他们对这个问题给出什么答案我都无法理解,谁能用简单的语言解释一下为什么当我们最后添加元素时这个链表会变慢?
【问题讨论】:
-
因为基准测试很难。 stackoverflow.com/questions/504103/…
-
抱歉,您的测试完全失败了。见stackoverflow.com/questions/504103/…
-
尝试在你的
main方法中反转doCalculations的调用,你会得到完全不同的结果;) -
@LuiggiMendoza 你说的倒车是什么意思?
-
先拨打
doCalculations("LinkedList",LinkedList),然后拨打doCalculations("ArrayList",ArrayList);,你会看到的。
标签: java microbenchmark