ArrayList和LinkedList add和remove方法的比較
阿新 • • 發佈:2019-01-31
ArrayList 是一種可增長的陣列的實現。
使用ArrayList的優點在於 對 get和set的呼叫是花費常數時間。缺點就是有新的項插入,和現有的項刪除代價昂貴,除非變動是
在ArrayList的末端進行。
使用LinkedList的優點在於新的項的插入和現有的項的刪除開銷很小。這意味著在表的前端進行新增和刪除都是常數時間的操作
,因此LinkedList提供了addFirst,removeFirst,addLast,removeLast,以及getFirst和getLast等都有效的新增刪除和訪問。缺點
就在於它不容易作索引的,所以get的呼叫是昂貴的,除非非常接近表的兩端。
下面就分別使用add和remove操作來看這兩種集合有何差異。
先來看add方法。
列印結果如下package com.songwenjin.list; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class TestList { public static void makeList1(List<Integer> lst,int N){ lst.clear(); long start=System.currentTimeMillis(); for(int i=0;i<N;i++){ lst.add(i); } long end=System.currentTimeMillis(); System.out.println("向表的末端新增"+N+"條花費的時間="+(end-start)+"毫秒"); } //向表的末端新增資料 public static void main(String[] args) { int N1=500000; int N2=1000000; List<Integer> arrayList=new ArrayList<Integer>(); List<Integer> linkedList=new LinkedList<Integer>(); makeList1(arrayList,N1); makeList1(arrayList,N2); makeList1(linkedList,N1); makeList1(linkedList,N2); } }
向表的末端新增500000條花費的時間=14毫秒
向表的末端新增1000000條花費的時間=39毫秒
向表的末端新增500000條花費的時間=16毫秒
向表的末端新增1000000條花費的時間=24毫秒
可以看到 不管是ArrayLisst(忽略動態擴容)還是LinkedList作為引數進行傳遞,執行時間都是O(n),就是說是常數的。因為add每次呼叫都是在表的末端進行從而花費的是常數時間(忽略ArrayList的動態擴容)。