ArrayList和LinkedList的區別java
一、存儲對象的方式數組
ArrayList採用的是數組形式來保存對象的,這種方式將對象放在連續的位置中,因此最大的缺點就是插入刪除時很是麻煩。
ide
LinkedList採用的將對象存放在獨立的空間中,且在每一個空間中還保存下一個連接的索引,可是缺點就是查找很是麻煩,須要從第一個索引開始。
學習
二、讀取方式的區別spa
ArrayList相似於數組,讀取訪問時能夠根據索引直接找到,所以ArrayList在一般狀況下,查詢的速度優於LinkedList。指針
LinkedList採用的是指針的形式,讀取的時候須要移動指針,所以一般速度相對慢於ArrayList。code
三、增長刪除的區別對象
對於增長和刪除一般狀況下,LinedList比較佔優點,由於ArrayList要移動數據。由於刪除的時候LinkedList只須要移動指針釋放掉將要刪除的內容就能夠了,而ArrayList則須要逐個移動。可是,在實際狀況當中: 若只對單條數據插入或刪除,ArrayList的速度反而優於LinkedList。但如果批量隨機的插入刪除數據,LinkedList的速度大大優於ArrayList. 由於ArrayList每插入一條數據,要移動插入點及以後的全部數據。 實驗:在分別有200000條「記錄」的ArrayList和LinkedList的首位插入20000條數據耗時計算,LinkedList耗時約是ArrayList的1/20。索引
四、隨機查找的區別ci
理論上說,一般隨機查找指定節點的操做,LinkedList速度要快於ArrayList。可是實際應用過程當中,ArrayList在末尾插入和刪除數據的話,速度反而比LinkedList要快。驗證:一個插入和刪除200000條數據所需的時間。
long startTime = new Date().getTime(); String linkedCount1 = (String) linkedlist.get(100000);// 總記錄200000,linkedlist加載第100000條數據耗時15~32ms不等 long endTime = new Date().getTime(); System.out.println(endTime-startTime); String arrayCount2 = (String) arraylist.get(100000);// 總記錄200000,linkedlist加載第100000條數據耗時0ms long endTime2= new Date().getTime(); System.out.println(endTime2-endTime); /*分別insert200000條數據到linkedlist和arraylist *因爲是在末尾插入數據,arraylist的速度比linkedlist的速度反而要快 */ public static void insertList(LinkedList linklist, ArrayList arraylist) { long startTime = new Date().getTime(); System.out.println(time1); for (int i = 0; i < 200000; i++) { linklist.add(i, "linklist" + i); } long endTime = new Date().getTime(); System.out.println(endTime - startTime ); for (int j = 0; j < 200000; j++) { arraylist.add(j, "arraylist" + j); } long endTime2= new Date().getTime(); System.out.println(endTime2- endTime ); } /*delete linkedlist和arraylist中的200000條數據 *因爲是在末尾刪除數據,arraylist的速度比linkedlist的速度反而要快 */ public static void deleteList(LinkedList linklist, ArrayList arraylist) { long startTime = new Date().getTime(); System.out.println(time1); for (int i = 199999; i >= 0; i--) { linklist.remove(i); } long endTime= new Date().getTime(); System.out.println(endTime- startTime ); for (int j = 199999; j >= 0; j--) { arraylist.remove(j); } long endTime2= new Date().getTime(); System.out.println(endTime2- endTime); } public static void main(String args[]) { LinkedList linkedlist = new LinkedList(); ArrayList arraylist = new ArrayList(); insertList(linkedlist, arraylist); .....
插入:
LinkedList 578ms
ArrayList 437ms
刪除:
LinkedList 31ms
ArrayList 16ms
總結:類的使用的優缺點,一般要放在特定的程序環境當中進行比較。理論的知識能奠基咱們夯實的基礎,可是在實際的開發過程當中咱們須要不斷的總結經驗,組織處一套適合本身開發的技術和邏輯。但願以上的知識能對你們的學習有所幫助,不足之處敬請你們賜教。