[align=center][img]
[b][size=large]背景:[/size]
[/b]
[size=medium]為了更加好了解linklist的工作原理,上面是鍊錶的示意圖[/size]
private transient entryheader = new entry(null, null, null);
private transient int size = 0;
/*** constructs an empty list.
*/public linkedlist()
[size=medium]定義了乙個內部類[b]header[/b]變數,其實起到了首節點的標誌作用,不存放任何元素(上圖的乙個節點)
[/size]
private transient entryheader = new entry(null, null, null);
private static class entry
}
[list]
[*]下面建立乙個節點
[/list]
public boolean add(e e)
private entryaddbefore(e e, entryentry)
上面可以轉換成下面的方式
entrynewentry = new entry(e, header, header.previous);
[size=medium]當插入第乙個節點是,傳入了e,header兩個元素,header是剛開始建立的頭指標,newentry1的previous物件為header,節點的size增加1[/size]
[list]
[*]因此newentry1.previous.next= header.next=newentry1
[*]因此newentry1.next.previous= header.previous=newentry1
[/list]
[size=medium]當插入第二個節點是,傳入了e,header兩個元素,header是剛開始建立的頭指標,newentry2的previous物件為header,節點的size增加1[/size]
[list]
[*]因此newentry2.previous.next= newentry1.next=newentry2
[*]因此newentry2.next.previous= header.previous=newentry2
[/list]
..... 依次類推
LinkList原始碼分析
本篇介紹的linkedlist是list介面的一種實現,它的底層是基於雙向鍊錶實現的,因此它具有插入刪除快而查詢修改慢的特點,此外,通過對雙向鍊錶的操作還可以實現佇列和棧的功能。linkedlist的底層結構如下圖所示。結點內部類 private static class node node這個內部...
VUE 原始碼導讀
斷斷續續耗費了近乙個月的時間,將vue 2.6版本的原始碼大致看了下。自己的理解,主要分兩個部分,工具方法準備和vue物件。工具準備 var strats var lifecycle hooks beforecreate created beforemount mounted beforeupdat...
leveldb 原始碼導讀
1,slice.h中slice是leveldb內部使用的字串類,很簡單 2,leveldb 儲存編碼 對於位元組儲存分大端小端位元組序還是小端小端位元組序 leveldb使用的是小端位元組序儲存,低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體的高位址端。編碼分為變長的varint和固定大小...