實踐驗證ArrayList與LinkedList的效能表現
阿新 • • 發佈:2018-11-10
我們在學習JAVASE的時候就知道,ArrayList底層是以陣列實現的,LinkedList則是以連結串列的形式實現的。
那麼我們今天就能探究一下兩者在插入資料和隨機訪問資料方面的效能表現。
實驗環境:系統:win10 64位
JDK:10
CPU:i5-4210u
記憶體:8GB
資料量:100萬。
測試程式碼如下:
int N=100; long result=0; for(int j=0;j<N;j++){ List<Integer> arrayList=new ArrayList<>(); Random random=new Random(); long start=System.currentTimeMillis(); for(int i=0;i<1000000;i++){ arrayList.add(random.nextInt()); } long end=System.currentTimeMillis(); System.err.println("總耗時:"+(end-start)+"ms"); result+=end-start; } System.err.println("平均耗時:"+result/N+"ms");
首先我們測試插入資料(100次):
ArrayList:平均耗時:138ms
LinkedList平均耗時:146ms
兩者相差無幾。
接下來測試隨機訪問,程式碼如下:
int N=100; long result=0; for(int j=0;j<N;j++){ List<Integer> arrayList=new LinkedList<>(); Random random=new Random(); for(int i=0;i<1000000;i++){ arrayList.add(random.nextInt()); } long start=System.currentTimeMillis(); for(int i=0;i<500000;i++){ int a=arrayList.get(random.nextInt(1000000)); } long end=System.currentTimeMillis(); System.err.println("總耗時:"+(end-start)+"ms"); result+=end-start; } System.err.println("平均耗時:"+result/N+"ms");
ArrayList:平均耗時:53ms
LinkedList 30秒內連第一次迴圈都沒有通過,實驗結束。