论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微秒