java集合之LinkedList詳解

2021-08-28 03:37:22 字數 2669 閱讀 6573

我們上一次說到list的arraylist,我們這次去看下linkedlist---顧名思義是鍊錶,鍊錶的優點就不用說了吧,增刪效率比較高(具體的朋友們上網看吧),先來看下linkedlist的整體構架:

首先我們看到了linkedlist間接的實現了list介面(說明linkedlist是有list的特性的,add,remove等)、實現了cloneable(可複製)、serializable(進行了序列化),除此之外還有乙個東西還實現了queue(佇列,說明應該是有佇列的一些特性,pop等),這次先不側重queue的東西,我們主要看linkedlist是如何實現鍊錶的。

//鍊錶的長度

transient int size = 0;

/*** pointer to first node.

* invariant: (first == null && last == null) ||

* (first.prev == null && first.item != null)

*///鍊錶的頭

transient nodefirst;

/*** pointer to last node.

* invariant: (first == null && last == null) ||

* (last.next == null && last.item != null)

*///鍊錶的尾

transient nodelast;

//鍊錶維護的node的結構

private static class node

}

我們可以看到,我們鍊錶維護了乙個size、first(頭)和last(尾),我們可以看到node的結構中有個item、next、prev充分說明了此鍊錶是乙個雙向鍊錶。

public static void main(string args)
這個空的建構函式沒有什麼內容,所以我們就跳過去,我們直接看add方法具體做的什麼。

/**

** this method is equivalent to .

** @return (as specified by )

*///看方法注釋,我們可以看到是將該元素新增到此鍊錶的end,返回true

//檢查index是否正確

private void checkelementindex(int index)

/*** returns the (non-null) node at the specified element index.

*///返回指定index位置的節點

nodenode(int index) else

}

我們可以看到,我們想要移除指定位置的節點,首先得找到這個節點(這個是重點),關鍵我們的鍊錶如何找到指定位置?不知道大家有沒有自己比較好的方法,我們來看下jdk的思路(我覺得jdk的實現方法很有趣),node(int index)方法中的if條件拿index和size的一半比較,文字解釋太麻煩了,我來畫個圖吧:

假設:我們linkedlist的長度為6,如要remove的index為3,此時我們3 < (size >> 1)為false,則我們從linkedlist後面開始直到變數i>index,此時i變數位置的就是index位置的node,如果我們index是2,那麼是從前面開始的,我們大家想這樣其實是把linkedlist從中間分為2個,速度是不是比沒分之前快兩倍呢,哈哈哈~

總結:linkedlist為雙鏈表,維護的是乙個first和last指標,而每個節點有item自身、prev和next兩個節點來維護雙鏈表的關係,其他的功能都是圍繞我們的雙鏈表來進行的,有興趣的大家可以仔細研究一下原始碼,有時會發現很有趣的小細節哦~

深入Java集合系列之二 LinkedList

前言 linkedlist底層使用的雙端鍊錶,即每個節點既包含指向其後繼的引用也包括指向其前驅的引用,linkedlist實現了list介面,繼承了abstractsequentiallist類,在頻繁進行插入以及刪除的情況下效率較高。linkedlist使用較多的是add get和remove,原...

java集合類庫學習記錄 LinkedList

1.介紹 linkedlist是list 介面的鏈結列表實現。實現所有可選的列表操作,並且允許所有元素 包括null 擴充套件了abstractsequentiallist抽象類,實現了deque和queue介面。這些操作允許將鏈結列表用作堆疊 佇列和雙端佇列。2.abstractsequentia...

Java之集合總結

1 集合 自己補齊 collection 單列集合 list 有序,可重複 arraylist 底層資料結構是陣列,查詢快,增刪慢 執行緒不安全,效率高 vector 底層資料結構是陣列,查詢快,增刪慢 執行緒安全,效率低 linkedlist 底層資料結構是鍊錶,查詢慢,增刪快 執行緒不安全,效率...