arraylist vs链表。为什么链接列表在最后添加时速度较慢?

时间:2014-05-15 17:33:06

标签: java microbenchmark

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的时间为13毫秒 LinkedList花费64ms的时间

我知道这是一个重复的问题,但是请不要删除它,无论他们对这个问题给出的答案我都无法理解,任何人都可以用简单的话来解释为什么当我们添加元素时这个链表更慢结束?

2 个答案:

答案 0 :(得分:4)

您目前在这里做的是一个微观基准。这不是一件容易的事,因为您必须考虑所有这些提示:How do I write a correct micro-benchmark in Java?

但是,没有必要重新发明轮子。有一些框架可以简化这项工作,例如JUnitBenchmarksCaliper,它们可以帮助您使用JUnit测试为您的代码/算法执行真正的基准测试。

答案 1 :(得分:0)

链接列表比较慢,因为它就像火车.......它必须检查每个元素并检查它是否值..直到它找到匹配的元素..所以想到它就像链式火车和你想从火车的第一个走到最后