ArrayList與LinkedList在底層的實現是不同的,前者依託於數組,後者依託於鏈表,與其說是ArrayList與LinkedList的區別不如說是數組與鏈表的區別。數組
1.對於數組(ArrayList)而言,隨機訪問的get比較佔優點。spa
例子:code
對於均存放了200000個元素的ArrayList和LinkedList,使用get獲取其中元素。blog
int temp=0; System.out.print("ArrayList獲取元素的時間\n"); for(int j=0;j<arrlist.size();j++){ if(j%40000==0){ temp++; long begin2 = System.nanoTime(); System.out.println(arrlist.get(j)); long end2 = System.nanoTime(); System.out.println("第"+temp+"次獲取i值所用時間"+(end2-begin2)+"ns"); } } int temp1=0; System.out.print("LinkedList獲取元素的時間\n"); for(int j=0;j<linlist.size();j++){ if(j%40000==0){ temp1++; long begin3 = System.nanoTime(); System.out.println(linlist.get(j)); long end3 = System.nanoTime(); System.out.println("第"+temp1+"次獲取i值所用時間"+(end3-begin3)+"ns"); } }
運行結果:rem
2.對於鏈表(LinkedList)而言,add和remove操做要快不少。get
可是實際狀況來看,若是是單條數據的插入LinkedList反而沒有ArrayList快ast
例子:class
long begin = System.nanoTime(); for(int i=0;i<200000;i++){ arrlist.add("data"); } long end = System.nanoTime(); System.out.print((end-begin)+"ns"); System.out.print("\n"); long begin1 = System.nanoTime(); for(int i=0;i<200000;i++){ linlist.add("data"); } long end1 = System.nanoTime(); System.out.print((end1-begin1)+"ns"); System.out.print("\n");
運行結果:List
可是若是是隨機的批量增長刪除數據,LinkedList是比ArrayList快多了的。(實驗未驗證)方法
3.LinkedList的方法較豐富。有getFirst(),getLast()這些都是ArrayList沒有的。
4.總結:
查詢操做用ArrayList,插入刪除用LinkedList。
數據不是很龐大,不必糾結。