1. 程式人生 > >從源代碼來理解ArrayList和LinkedList差別

從源代碼來理解ArrayList和LinkedList差別

表示 得到 代碼 -a art 一個 http 指定 lin

從源代碼理解ArrayListLinkedList差別

ArrayList

技術分享

ArrayList默認容量為10,實質是一個數組用於存放元素,size表示ArrayList所包括的元素個數。

技術分享

ArrayList3個構造函數,第一個構造函數指定容量。第二個構造函數默覺得一個空數組。第三個構造函數是從集合c轉變為Arraylist的數組

技術分享

技術分享

技術分享

add函數中,先確認數組容量夠不夠,一開始假設默認初始化(也就是調用第二個構造函數),加入元素時grow出來數組容量為10。構造了一個新的數組而且copy原來數組元素的值,然後element[0]

賦值。第二次加入元素時由於elementData != EMPTY_ELEMENTDATA且

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差別