ArrayList和LinkedList的用法

ArrayList和LinkedList的區別java


一、存儲對象的方式數組

ArrayList採用的是數組形式來保存對象的,這種方式將對象放在連續的位置中,因此最大的缺點就是插入刪除時很是麻煩。
ide

LinkedList採用的將對象存放在獨立的空間中,且在每一個空間中還保存下一個連接的索引,可是缺點就是查找很是麻煩,須要從第一個索引開始。
學習


二、讀取方式的區別spa

ArrayList相似於數組,讀取訪問時能夠根據索引直接找到,所以ArrayList在一般狀況下,查詢的速度優於LinkedList。指針

LinkedList採用的是指針的形式,讀取的時候須要移動指針,所以一般速度相對慢於ArrayList。code


三、增長刪除的區別對象

對於增長和刪除一般狀況下,LinedList比較佔優點,由於ArrayList要移動數據。由於刪除的時候LinkedList只須要移動指針釋放掉將要刪除的內容就能夠了,而ArrayList則須要逐個移動。可是,在實際狀況當中: 若只對單條數據插入或刪除,ArrayList的速度反而優於LinkedList。但如果批量隨機的插入刪除數據,LinkedList的速度大大優於ArrayList. 由於ArrayList每插入一條數據,要移動插入點及以後的全部數據。 實驗:在分別有200000條「記錄」的ArrayList和LinkedList的首位插入20000條數據耗時計算,LinkedList耗時約是ArrayList的1/20。索引


四、隨機查找的區別ci

理論上說,一般隨機查找指定節點的操做,LinkedList速度要快於ArrayList可是實際應用過程當中,ArrayList在末尾插入和刪除數據的話,速度反而比LinkedList要快。驗證:一個插入和刪除200000條數據所需的時間。

        long startTime = new Date().getTime();
        String linkedCount1 = (String) linkedlist.get(100000);//  總記錄200000,linkedlist加載第100000條數據耗時15~32ms不等
        long endTime = new Date().getTime();
        System.out.println(endTime-startTime);
        String arrayCount2 = (String) arraylist.get(100000);//  總記錄200000,linkedlist加載第100000條數據耗時0ms
        long endTime2= new Date().getTime();
        System.out.println(endTime2-endTime);

   /*分別insert200000條數據到linkedlist和arraylist
    *因爲是在末尾插入數據,arraylist的速度比linkedlist的速度反而要快 
    */
    public static void insertList(LinkedList linklist, ArrayList arraylist) {
        long startTime = new Date().getTime();
        System.out.println(time1);
        for (int i = 0; i < 200000; i++) {
            linklist.add(i, "linklist" + i);
        }
        long endTime = new Date().getTime();
        System.out.println(endTime - startTime );
        for (int j = 0; j < 200000; j++) {
            arraylist.add(j, "arraylist" + j);
        }
        long endTime2= new Date().getTime();
        System.out.println(endTime2- endTime );
    }


/*delete linkedlist和arraylist中的200000條數據
    *因爲是在末尾刪除數據,arraylist的速度比linkedlist的速度反而要快 
    */
    public static void deleteList(LinkedList linklist, ArrayList arraylist) {
        long startTime = new Date().getTime();
        System.out.println(time1);
        for (int i = 199999; i >= 0; i--) {
            linklist.remove(i);
        }
        long endTime= new Date().getTime();
        System.out.println(endTime- startTime );
        for (int j = 199999; j >= 0; j--) {
            arraylist.remove(j);
        }
        long endTime2= new Date().getTime();
        System.out.println(endTime2- endTime);
    }

    public static void main(String args[]) {
        LinkedList linkedlist = new LinkedList();
        ArrayList arraylist = new ArrayList();
        insertList(linkedlist, arraylist);
.....

插入:

LinkedList 578ms

ArrayList 437ms

刪除:

LinkedList 31ms

ArrayList 16ms


總結:類的使用的優缺點,一般要放在特定的程序環境當中進行比較。理論的知識能奠基咱們夯實的基礎,可是在實際的開發過程當中咱們須要不斷的總結經驗,組織處一套適合本身開發的技術和邏輯。但願以上的知識能對你們的學習有所幫助,不足之處敬請你們賜教。

相關文章
相關標籤/搜索