ArrayList和LinkedList的区别

1.ArrayList和LinkedList是什么?
 
        在我看来,要想搞清楚ArrayList和LinkedList有什么区别,首先一定得要知道这两个东西到底是什么。因为在我看来,通常拿来被比较有区别的东西,它们大体上一定存在很多相似的地方。为了剖析本质,我们直接看看它们的源码声明。
 
 Arraylist: LinkedList:
 
         可以看出ArrayList和LinkedList都是List接口下的实现类,而List接口可以说是集合类中最常用的接口了,它是一个元素有序、可以重复、可以为null的集合。而且List接口的元素,都可以直接通过下标索引获取。既然如此,那么说明ArrayList和LinkedList都具有上述的功能,那他们使用起来的效率到底有什么区别呢?
 
 2.ArrayList和LinkedList性能比较
 
               1.插入效率比较
 
          因为上面我们已经提到过这两者都是主要用来存储元素的集合类,那我们可以使用较大的数据量,来测试一下它们插入的效率如何      
 
//插入到头部
 
public static void main(String[] args) {
 
        ArrayList<Integer> list1 = new ArrayList<>();
 
        LinkedList<Integer> list2 = new LinkedList<>();
 
        long time1 = System.currentTimeMillis();
 
        for (int i = 0; i < 1000000; i++) {
 
            list1.add(0,i);
 
        }
 
        long time2 = System.currentTimeMillis();
 
        for (int i = 0; i < 1000000; i++) {
 
            list2.add(0,i);
 
        }
 
        long time3 = System.currentTimeMillis();
 
        //ArrayList的插入时间
 
        System.out.println(time2-time1);//58746
 
        //LinkedList的插入时间
 
        System.out.println(time3-time2);//124
 
    }
 
     //插入到尾部
 
     public static void main(String[] args) {
 
        ArrayList<Integer> list1 = new ArrayList<>();
 
        LinkedList<Integer> list2 = new LinkedList<>();
 
        long time1 = System.currentTimeMillis();
 
        for (int i = 0; i < 1000000; i++) {
 
            list1.add(i);
 
        }
 
        long time2 = System.currentTimeMillis();
 
        for (int i = 0; i < 1000000; i++) {
 
            list2.add(i);
 
        }
 
        long time3 = System.currentTimeMillis();
 
        //ArrayList的插入时间
 
        System.out.println(time2-time1);//23
 
        //LinkedList的插入时间
 
        System.out.println(time3-time2);//140
 
    }
 
        大家发现没有,当插入100万个元素到头部时,LinkedList的速率竟然是ArrayList五千倍之多,当我们插入100万个元素到尾部时,但是又发现ArrayList的速率比LinkedList还快,这是为什么呢?

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64877.shtml

张贴在3