程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 比較ArrayList和LinkedList,linkedlist

比較ArrayList和LinkedList,linkedlist

編輯:JAVA綜合教程

比較ArrayList和LinkedList,linkedlist


 

 

 

比較一:添加內容

 

涉及方法:add

 

    public void add_test(){
        List<Person> addlist = new ArrayList<Person>();
        Person p = new Person("阿呆",20);
long begin = System.currentTimeMillis(); System.out.println("ArrayList 開始時間:"+begin); for(int i=0; i<10000000; i++){ addlist.add(p); // System.out.println("第"+i+"個"+"所用時間:"+(System.currentTimeMillis()-begin)); } long over = System.currentTimeMillis(); System.out.println("ArrayList 結束時間:"+over); System.out.println("ArrayList 最終時間:"+(over-begin)); }

注:這是ArrayList的測試代碼,但是測LinkedList只要把addlist的類型改一下就行,改成LinkedList

結果:

 

ArrayList

 

 

LinkedList

 

顯然在插入10000000條數據時,耗時ArrayList < LinkedList

 

 

 

比較二:獲取內容

涉及方法:get、contains、indexOf、lastIndexOf

 

1、get測試

    public void get_test(){
        
        //准備工作,添加一堆阿呆,添加一個阿傻
        List<Person> getlist = new ArrayList<Person>();
        Person p = new Person("阿呆",20);
        for(int i=0; i<10000000; i++){
            getlist.add(p);
        }
        Person p2 = new Person("阿傻",20);
        getlist.add(77777,p2);
        System.out.println("添加完成");
        
        
        // get 測試
        long begin = System.currentTimeMillis();
        System.out.println("get測試開始時間:"+begin);
        getlist.get(7777777);
        long over = System.currentTimeMillis();
        System.out.println("get測試結束時間:"+over);
        System.out.println("get測試最終時間:"+(over-begin));
   }    

結果

ArrayList

LinkedList

 

 

 

2、contains測試

        // contains 測試
        long begin = System.currentTimeMillis();
        for(int i=0; i<10000; i++){
            getlist.contains(p2);
        }
        long over = System.currentTimeMillis();
        System.out.println("contains測試最終時間:"+(over-begin));

注:只要把上面測試add的那段代碼換成這段,就可以測試contains,准備工作的代碼不變

結果

ArrayList

LinkedList

 

 

 

3、indexOf測試

        // indexOf 測試
        long begin = System.currentTimeMillis();
        for(int i=0; i<10000; i++){
            getlist.indexOf(p2);
        }
        long over = System.currentTimeMillis();
        System.out.println("indexOf測試最終時間:"+(over-begin));

結果

ArrayList

LinkedList

 

 

 

4、lastIndexOf測試

        // lastIndexOf 測試
        long begin = System.currentTimeMillis();
        for(int i=0; i<100; i++){
            getlist.lastIndexOf(p2);
        }
        long over = System.currentTimeMillis();
        System.out.println("lastIndexOf 測試最終時間:"+(over-begin));

結果

ArrayList

LinkedList

 

 

小結:

get:ArrayList < LinkedList,差別很大

contains:ArrayList < LinkedList,差別不那麼大,以下兩個也是

indexOf:ArrayList < LinkedList

lastIndexOf:ArrayList < LinkedList

 

 

 

比較三:刪除內容

 

涉及方法:remove(根據索引)、remove(根據對象)

 

 

1、remove(根據索引)

    public void remove_test(){
        
        //准備工作,添加一堆阿呆
        List<Person> getlist = new ArrayList<Person>();
        Person p = new Person("阿呆",20);
        for(int i=0; i<10000000; i++){
            getlist.add(p);
        }
        System.out.println("添加完成");
        
        
        // remove(int index)  測試
        System.out.println(getlist.size());
        long begin = System.currentTimeMillis();
        for(int i=0; i<10000000; i++){
            getlist.remove(getlist.size()-1);
        }
        long over = System.currentTimeMillis();
        System.out.println("remove(int index)  測試最終時間:"+(over-begin));
        System.out.println(getlist.size());
  }

結果

ArrayList

LinkedList

 

 

 

2、remove(根據對象)

        // remove(Object o)   測試
        System.out.println(getlist.size());
        long begin = System.currentTimeMillis();
        for(int i=0; i<999; i++){
            getlist.remove(p);
        }
        long over = System.currentTimeMillis();
        System.out.println("remove(Object o)   測試最終時間:"+(over-begin));
        System.out.println(getlist.size());

結果

ArrayList

LinkedList

 

 

 

小結:

remove(根據索引):ArrayList < LinkedList,差別不大

remove(根據對象):ArrayList > LinkedList,差別非常大

 

 

 

 進一步

 

在插入內容時候:根據有無指定插入位置

ArrayList

 

 

LinkedList

 

 

根據插入位置的不同

ArrayList

 

LinkedList

 

 

 

在獲取內容的時候,根據索引位置在整個集合的前面、中間、後面的不同

 

ArrayList

 

LinkedList

 

 

在移除內容的時候,根據索引位置在整個集合的前面、中間、後面的不同

 

 

ArrayList

 

LinkedList

 

 

 

小結:

在插入內容時候:

根據有無指定插入位置,

ArrayList:有索引更慢

LinkedList:差不多

根據插入位置的不同

ArrayList:位置越往後越慢

LinkedList:前面的最快,後面的較慢,中間的最慢

 

在獲取內容的時候,

根據索引位置在整個集合的前面、中間、後面的不同

ArrayList:差不多

LinkedList:索引越後面越慢

 

在移除內容的時候,

根據索引位置在整個集合的前面、中間、後面的不同

ArrayList:差不多

LinkedList:索引越後面越慢

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved