下文帶/**/為原始碼注釋
//為個人注釋。源**使用這個顏色
/*構建乙個空列表*/
//無參構造器
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...