ArrayList與LinkedList的插入數據速率上的比較


 1 public class ArrayAndLinkedList {
 2         List<String> arrayList = new ArrayList<String>();
 3         List<String> linkedList = new LinkedList<String>();
 4         
 5         void add(List<String> list){
 6             long startTime = System.currentTimeMillis();
 7             System.out.println("開始時間:"+startTime);
 8             for(int i=0;i<20000;i++){
 9 //                list.add(0,String.valueOf(i));  //數據越大LinkedList越快
10 //                ArrayList:
11 //                開始時間:1547690654762
12 //                結束時間:1547690658732
13 //                總耗時:3970
14 //                LinkedList:
15 //                開始時間:1547690658732
16 //                結束時間:1547690658828
17 //                總耗時:96
總結:當list在指定插入坐標位置時,LinkedList的插入速度明顯要比ArrayList快,且隨着數據的增大差距越加明顯
18 19 list.add(String.valueOf(i)); //數據小時LinkedList快,數據越大ArrayList越快 20 // i = 20,000 時: 21 // ArrayList: 22 // 開始時間:1547691354123 23 // 結束時間:1547691354136 24 // 總耗時:13 25 // LinkedList: 26 // 開始時間:1547691354137 27 // 結束時間:1547691354142 28 // 總耗時:5 29 30 // i = 200,000時: 31 // ArrayList: 32 // 開始時間:1547690710382 33 // 結束時間:1547690710432 34 // 總耗時:50 35 // LinkedList: 36 // 開始時間:1547690710433 37 // 結束時間:1547690710571 38 // 總耗時:138
總結:當list插入數據在尾部且數據量較小時,LinkedList的插入速度要比ArrayList快;
當list插入數據在尾部且數據量較大時,LinkedList的插入速度要比ArrayList慢,且隨着數據量的增大差距越加明顯
39 } 40 long endTime = System.currentTimeMillis(); 41 System.out.println("結束時間:"+endTime); 42 System.out.println("總耗時:"+ (endTime - startTime)); 43 } 44 @Test 45 public void addTimeTest(){ 46 System.out.println("ArrayList:"); 47 add(arrayList); 48 System.out.println("LinkedList:"); 49 add(linkedList); 50 51 } 52 53 }

分析:

        ArrayList是基於數組的增加,當在指定位置進行一個插入時需要移動原有數據位置;

        LinkedList是基於雙向鏈表的增加,因為鏈表中每一個節點之間都存在相互引用,那么數據在插入時只需要把指針移到對應的節點即可。

        所以在指定位置進行插入時,LinkedList的速率要優於ArrayList。

        當數據只是追加在尾部時,由於ArrayList是擴容的方式,LinkedList是需要新建立節點。當數據量很大的時侯new節點的時間會大於擴容的時間,

        所以ArrayList插入的速度就會優於LinkedList。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM