LinkedList和ArrayList

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

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

例子:code

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

     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");
            }
        }

运行结果:rem

 

2.对于链表(LinkedList)而言,add和remove操做要快不少。get

可是实际状况来看,若是是单条数据的插入LinkedList反而没有ArrayList快ast

例子:class

        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");        

运行结果:List

可是若是是随机的批量增长删除数据,LinkedList是比ArrayList快多了的。(实验未验证)方法

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

4.总结:

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

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

相关文章
相关标签/搜索