比較一:添加內容
涉及方法: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:索引越後面越慢