LinkList 部分原始碼導讀

2021-09-01 14:26:53 字數 1405 閱讀 9477

[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和固定大小...