LinkedList和ArrayList

ArrayList与LinkedList在底层的实现是不一样的,前者依托于数组,后者依托于链表,与其说是ArrayList与LinkedList的区别不如说是数组与链表的区别。

1.对于数组(ArrayList)而言,随机访问的get比较占优势。

例子:

对于均存放了200000个元素的ArrayList和LinkedList,使用get获取其中元素。

     int temp=0;
        System.out.print("ArrayList获取元素的时间\n");
        for(int j=0;j<arrlist.size();j++){
            if(j%40000==0){
                temp++;
                long begin2 = System.nanoTime();
                System.out.println(arrlist.get(j));
                long end2 = System.nanoTime();
                System.out.println("第"+temp+"次获取i值所用时间"+(end2-begin2)+"ns");
            }
        }
        int temp1=0;
        System.out.print("LinkedList获取元素的时间\n");
        for(int j=0;j<linlist.size();j++){
            if(j%40000==0){
                temp1++;
                long begin3 = System.nanoTime();
                System.out.println(linlist.get(j));
                long end3 = System.nanoTime();
                System.out.println("第"+temp1+"次获取i值所用时间"+(end3-begin3)+"ns");
            }
        }

运行结果:

 

2.对于链表(LinkedList)而言,add和remove操作要快很多。

但是实际情况来看,如果是单条数据的插入LinkedList反而没有ArrayList快

例子:

        long begin = System.nanoTime();
        for(int i=0;i<200000;i++){
            arrlist.add("data");
        }
        long end = System.nanoTime();
        System.out.print((end-begin)+"ns");
        System.out.print("\n");
        long begin1 = System.nanoTime();
        for(int i=0;i<200000;i++){
            linlist.add("data");
        }
        long end1 = System.nanoTime();
        System.out.print((end1-begin1)+"ns");
        System.out.print("\n");        

运行结果:

但是如果是随机的批量增加删除数据,LinkedList是比ArrayList快多了的。(实验未验证)

3.LinkedList的方法较丰富。有getFirst(),getLast()这些都是ArrayList没有的。

4.总结:

查询操作用ArrayList,插入删除用LinkedList。

数据不是很庞大,没必要纠结。

posted @ 2016-04-21 01:01  Rui_Jia  阅读(324)  评论(0编辑  收藏  举报