這一篇咱們介紹LinkedList。LinkedList結構簡單詳細請往下看。數組
按照源碼中的說明,LinkedList是List與Deque接口的雙鏈表實現,實現全部可選操做,並容許全部類型的數據做爲元素包括null。安全
值得注意的是,LinkedList在根據索引查找的時候,會根據此索引離頭指針與尾指針的距離進行權衡,選擇開始遍歷首位從頭仍是仍是從尾開始。數據結構
LinkedList不是線程安全的,若是多個線程同步的訪問一個LinkedList而且至少有一個線程改變了這個list的結構,那麼這個LinkedList必需要作額外的加鎖操做來確保線程的安全性。這個額外的操做能夠是在若是這個list被某個對象封裝,能夠對那個對象加鎖來完成,若是沒有那種對象,能夠使用: List list = Collections.synchronizedList(new LinkedList(...)); 來完成加鎖功能。線程
LinkedList返回的Iterator是基於快速失敗機制的。關於快速失敗機制能夠看這篇文章。3d
與前幾篇文章同樣,咱們經過查看LinkedList的屬性來探討其存儲結構:指針
他的屬性內容挺簡單,就這麼幾個。咱們簡單介紹一下cdn
size: 其實不用多說,就是記錄存儲元素的數量的。對象
first: 咱們說過,LinkedList是一個雙向鏈表,那這個first就是這個雙向鏈表的頭指針了。blog
last: 這個last就是雙向鏈表的尾指針。索引
如今咱們具體來看一下LinkedList內部結點Node這個類長什麼樣子:
很簡單,包含一個存儲數據的item,一個前繼節點prev,一個後繼節點next,如今咱們就可能清晰的認識到LinkedList的存儲結構了,咱們用個圖來加深一下印象。
其中prex爲null的就是head節點,也就是圖中第一個節點,next爲null的節點就是last節點,就是圖中的最後一個節點