JDK原始碼之LinkedList

2022-06-17 18:12:07 字數 3592 閱讀 4277

下文帶/**/為原始碼注釋

//為個人注釋。源**使用這個顏色

/*構建乙個空列表*/

//無參構造器

public linkedlist() {}

//將要新增的元素放到node物件中的item屬性中。

//多個node物件構成乙個鍊錶,物件中持有下乙個

//和上乙個node物件

private static class node

}/**指向最後乙個節點的指標**/

transient nodelast;//linkedlist的成員變數

/*指向第乙個節點的指標*/

transient nodefirst;//linkedlist的成員變數

/*該列表被修改的次數*/

protected transient int modcount = 0;//linkedlist的成員變數

//當前集合的元素總個數

transient int size = 0;//linkedlist的成員變數

/*將指定的元素追加到列表的末尾。*/

//新增元素

public boolean add(e e)

/*e作為最後乙個元素。*/

/*在列表的開頭插入指定的元素。*/

public void addfirst(e e)

/*e作為第乙個元素。*/

/*將指定的元素追加到列表的末尾。*/

public void addlast(e e)

/*e作為最後乙個元素。*/

/*在列表的指定位置插入指定的元素。將元素當前的位置

(如果有的話)和後續的元素向右移動(在它們的索引中新增乙個)。

*/public void add(int index, e element)

private void checkpositionindex(int index)

/*告知引數是否是迭代器或新增操作的有效位置的索引。*/

private boolean ispositionindex(int index)

/*將元素e插入到非空節點succ之前。*/

void linkbefore(e e, nodesucc)

//第乙個node建立後,last和first都是node1。第二個node建立後last是node2,還是firstnode1。

//拿到node後獲取成員item。

/*返回列表中的第乙個元素。*/

public e getfirst()

/*返回列表中的最後乙個元素*/

public e getlast()

/*返回列表中指定位置的元素。*/

public e get(int index)

private void checkelementindex(int index)

/**告知引數是否為現有元素的索引。**/

private boolean iselementindex(int index)

/*返回指定元素索引處的(非空)節點。*/

nodenode(int index) else

}//這裡假設linkedlist元素總個數為100,當前查詢的index為49則100/2=50

//49<50,先獲取集合內第乙個node,然後從0開始,每次都取node的next

//也就是next代表的node。需要迴圈49次才能拿到index為49的元素。

//如果當前元素為100,當前查詢的index為50,則從99開始,往後迴圈查詢

//需要迴圈48次。最快的兩種情況是要查詢第0號下標則第乙個迴圈不滿足直接

//返回first或者要查詢99號下標不滿足第二個迴圈直接返回last。但是這兩

//中情況使用getfirst()或者getlast()是最快的。

/*將列表中指定位置的元素替換為指定元素。*/

public e set(int index, e element)

/*刪除並返回列表中的第乙個元素。*/

public e removefirst()

/*斷開第乙個非空節點的鏈結*/

/*刪除並返回列表中的最後乙個元素。*/

public e removelast()

/*解除最後乙個非空節點l的鏈結。*/

/*移除此列表中指定位置的元素。將後面的元素向左移動

(從它們的索引中減去1)。返回從列表中刪除的元素。

*/public e remove(int index)

/*unlinks non-null node x.*/

e unlink(nodex) else

//如果被刪除的node的next是null表示它是最後乙個

if (next == null) else

//將元素內容指標斷掉

x.item = null;

//計數器操作

/*如果指定元素出現,則從列表中刪除第乙個出現的元素。如果此列表不包含該元素,則將對其進行更改。

*///其實這個注釋是非常不令人理解的。。。我的理解是不包含該元素則不對其進行更改

public boolean remove(object o)

}} else }}

//最後沒有滿足條件的返回false刪除失敗

return false;

}

JDK原始碼走讀(4) 容器之LinkedList

本章分析list系列中的linkedlist,真正意義上的鍊錶,底層採用鍊錶形式儲存資料元素。linkedlist是乙個雙向鍊錶,可以向前或向後兩個方向遍歷鍊錶。linkedlist也可以存放null元素。一 類實現 繼承體系結構 為了對整個list實現 繼承體系有個全貌,先將體系結構圖畫出來 二 ...

原始碼解析 JDK原始碼之LinkedHashMap

linkedhashmap原始碼,基於 jdk1.6.43 他繼承了hashmap,並且實現了插入和訪問的有序功能 public class linkedhashmapextends hashmapimplements map 其也有乙個entry內部類,繼承了 hashmap 的entry 內部類...

JDK原始碼之Map

1.hashmap hashmap初始化的方式有四種。建立乙個entry陣列,預設初始長度為16,當大於0.75的時候,擴充套件為當前的2倍。有4中初始化map的方式。mapmap new hashmap mapmap2 new hashmap 17 mapmap3 new hashmap 15,2...