從源代碼來理解ArrayList和LinkedList差別
從源代碼理解ArrayList和LinkedList差別
ArrayList
ArrayList默認容量為10,實質是一個數組用於存放元素,size表示ArrayList所包括的元素個數。
ArrayList的3個構造函數,第一個構造函數指定容量。第二個構造函數默覺得一個空數組。第三個構造函數是從集合c轉變為Arraylist的數組
add函數中,先確認數組容量夠不夠,一開始假設默認初始化(也就是調用第二個構造函數),加入元素時grow出來數組容量為10。構造了一個新的數組而且copy原來數組元素的值,然後element[0]
minCapacity - elementData.length <0所以直接element[1]賦值,並沒有擴充容量,僅僅有當滿容量時才會擴容。
remove(int)函數,指移走序號為index的元素,numMoved指的是index後面元素個數,System.arraycopy後面的元素往前推一格,最後的元素置null,返回被刪除的value
跟上面remove(int)的原理一樣.
假設找得到,則返回序號。否則返回-1
LinkedList
LinkedList存放數據採用的是鏈表形式存放
first是指向首節點。last是指向尾結點
LinkedList有兩個構造函數,第二個構造函數中將集合的元素傳到鏈表上
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
都是採用鏈表插入數據的方法
都是採用鏈表刪除元素的方法
鏈表查找元素的方法。
從源代碼來理解ArrayList和LinkedList差別