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