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。

數據不是很龐大,不必糾結。

相關文章
相關標籤/搜索