论ArrayList与LinkedList的读取和存储速度与结论相驳

论ArrayList与LinkedList的读取和存储速度优势

 

课题内容:

 

ArryList 与 LinkedList的速度比较(每组4个值,取其平均数):
在存储999999个值时:ArrayList平均每储存一个值的时间是:4.3000043000043e-4
                                 LinkedList平均每储存一个值的时间是:8.542508542508543e-4


也就是说,平均每储存一个数据ArrayList仅仅是LinkedList时间的50.337%。

 在读取时:            ArrayList平均每读取一个值的时间是:5.000005000005e-6
                          LinkedList平均每读取一个值的时间是:4.55000455000455e-5


也就是说,平均每检查一个数据ArrayList仅仅是LinkedList时间的40.42%。

 

这样一来证明结果和理论中的ArrayList的读取速度优于LinkedList与实验结果相符合,而存储速度却也是小于Linked,这与结论相驳。小弟在这里求解释!


ArrayList:
------------------------------------------------------------------------------------------import java.util.*;
public class test {

 

 

 public static void main(String[] args) {

  GregorianCalendar d = new GregorianCalendar();
  //定义变量存储开始的时间
  int startMinute;
  int startSecond;
  //定义变量存储结束的时间
  int endMinute;
  int endSecond;
  //声明
  ArrayList arr = new ArrayList();
  startMinute = d.get(Calendar.MINUTE);
  startSecond = d.get(Calendar.SECOND);
  System.out.println("The function start at "+startMinute+" 分 "+startSecond+"秒");
  for(int i = 0;i<999999;i++){
   arr.add(i);
  }
  boolean check =arr.contains(999999);
  endMinute = d.get(Calendar.MINUTE);
  endSecond = d.get(Calendar.SECOND);
  System.out.println(check);
  System.out.println("The function over at "+startMinute+" 分 "+startSecond+"秒");
 }
}
------------------------------------------------------------------------------------------结果:
The function start at 51 分 43秒
true
The function over at 51 分 43秒
然而将ArrayList换成LinkedList后,结果还是:
The function start at 12 分 0秒
false
The function over at 12 分 0秒
下面,我决定将时间单位换以毫秒:
结果:
The function start at 21 分 599毫秒
false
The function over at 21 分 599毫秒
是的,结果还是没有变!那么,就用微秒为单位吧。
———————————————————————————————————import java.util.*;
import java.text.*;
public class test {

 public static void main(String[] args) {
  SimpleDateFormat change = new SimpleDateFormat();
  GregorianCalendar d = new GregorianCalendar();
  
  //定义变量存储开始的时间
  int startMinute;
  int startSecond;
  //定义变量存储结束的时间
  int endMinute;
  int endSecond;
  //声明
  ArraydList arr = new ArrayList();
  startMinute = d.get(Calendar.MINUTE);
  startSecond = d.get(Calendar.MILLISECOND);
  long begintime = System.currentTimeMillis();
  System.out.println(begintime);
  for(long i = 0;i<999999;i++){
   arr.add(i);
  }
  //boolean check =arr.contains(0);
  endMinute = d.get(Calendar.MINUTE);
  endSecond = d.get(Calendar.MILLISECOND);
  //System.out.println(check);
  long endtime = System.currentTimeMillis();
  System.out.println(endtime);
 }
}
————————————————————————————————————————
存储999999个数据的速度差是:平均值430微秒左右
1306481305308
差420微秒
1306481305728
-------------------------------------
1306481498752
差430微秒
1306481499182
------------------------------------
1306481591170
差470微秒
1306481591640
-----------------------------------
1306481646002
差400微秒
1306481646402
-----------------------------------
读取速度是:平均值减去430,其速度约5微秒左右
1306481432303
false
1306481432713
相差
410微秒
---------------------------
1306481763388
false
1306481763848
相差
460微秒
-------------------------
1306481807328
false
1306481807748
相差
420微秒
-------------------------
1306481837805
false
1306481838255
相差
450微秒
下面将代码中的ArrayList换成LinkedList进行比较:
存储999999个数据的速度差是:平均值854.25微秒左右
1306506487995
相差842微秒
1306506488837
------------------------------------
1306506678282
相差905微秒
1306506679187
-------------------------------------
1306506727408
相差796微秒
1306506728204
-------------------------------------
1306506815675
相差847微秒
1306506816549
--------------------------------------
下面加上查找功能:平均值减去854.25,其速度约45.5微秒左右
1306506923287
false
1306506924145
相差
858微秒
--------------------------------------
1306507030742
false
1306507031647
相差
905微秒
--------------------------------------
1306507072115
false
1306507073051
相差
936微秒
------------------------------------------
1306507171733
false
1306507172633
相差
900微秒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值