java基礎提升之LinkedList

        這一篇咱們介紹LinkedList。LinkedList結構簡單詳細請往下看。數組

簡單介紹

        按照源碼中的說明,LinkedList是List與Deque接口的雙鏈表實現,實現全部可選操做,並容許全部類型的數據做爲元素包括null。安全

        值得注意的是,LinkedList在根據索引查找的時候,會根據此索引離頭指針與尾指針的距離進行權衡,選擇開始遍歷首位從頭仍是仍是從尾開始。數據結構

        LinkedList不是線程安全的,若是多個線程同步的訪問一個LinkedList而且至少有一個線程改變了這個list的結構,那麼這個LinkedList必需要作額外的加鎖操做來確保線程的安全性。這個額外的操做能夠是在若是這個list被某個對象封裝,能夠對那個對象加鎖來完成,若是沒有那種對象,能夠使用: List list = Collections.synchronizedList(new LinkedList(...)); 來完成加鎖功能。線程

        LinkedList返回的Iterator是基於快速失敗機制的。關於快速失敗機制能夠看這篇文章3d

存儲結構

與前幾篇文章同樣,咱們經過查看LinkedList的屬性來探討其存儲結構:指針

他的屬性內容挺簡單,就這麼幾個。咱們簡單介紹一下cdn

  1. size: 其實不用多說,就是記錄存儲元素的數量的。對象

  2. first: 咱們說過,LinkedList是一個雙向鏈表,那這個first就是這個雙向鏈表的頭指針了。blog

  3. last: 這個last就是雙向鏈表的尾指針。索引

如今咱們具體來看一下LinkedList內部結點Node這個類長什麼樣子:

很簡單,包含一個存儲數據的item,一個前繼節點prev,一個後繼節點next,如今咱們就可能清晰的認識到LinkedList的存儲結構了,咱們用個圖來加深一下印象。

其中prex爲null的就是head節點,也就是圖中第一個節點,next爲null的節點就是last節點,就是圖中的最後一個節點

總結

  1. 與ArrayList相比較,都實現了Collection接口
  2. ArrayList基於數組,具備較高的查詢速度,而LinkedList基於雙向鏈表,具備較快的添加或者刪除的速度。
  3. 因爲使用鏈表這種數據結構,不須要擴容
相關文章
相關標籤/搜索