ArrayDeque原始碼解析

2021-09-12 15:44:23 字數 1906 閱讀 2336

類的字段中包含 初始容量、頭尾指標,以陣列為底層資料結構

transient object elements; 

transient int head;

transient int tail;

private static final int min_initial_capacity = 8;

構造器

// 預設構造器 初始容量為16

public arraydeque()

// 建立乙個arraydeque 指定容量大小為 numelements

public arraydeque(int numelements)

// 建立乙個 arraydeque,初始資料為 collection c的所有值

public arraydeque(collection<? extends e> c)

分配具體容量和擴容成兩倍容量方法

private void allocateelements(int numelements) 

elements = new object[initialcapacity];

}private void doublecapacity()

新增方法

public void addfirst(e e) 

public void addlast(e e)

值得注意的是 arraydeque的 push和pop 分別後台用的是 addfirst 和 removefirst,也就是你直接把arraydeque當成棧用

public void push(e e) 

public e pop()

public e peek()

值得注意的是 arraydeque的offer,poll可以當成佇列用

public boolean offer(e e) 

public boolean offerlast(e e)

public e poll()

public e remove()

檢測arraydeque的 size和 empty

public int size() 

public boolean isempty()

常規迭代器

public iteratoriterator() 

private class deqiterator implements iterator

public e next()

public void remove()

lastret = -1;

}public void foreachremaining(consumer<? super e> action)

}}

降序迭代器,起始游標在尾節點,next方法是在陣列前一位進行移動

public iteratordescendingiterator() 

private class descendingiterator implements iterator

// next 是將游標在陣列的位置向前移動一位

public e next()

public void remove()

lastret = -1;

}}

看這個arraydeque的原始碼

有趣的地方是 可以直接使用棧、佇列的方法名當成 棧、佇列用,

還有乙個降序迭代器descendingiterator反向遍歷更方便。

ArrayDeque原始碼分析

1.體系結構 了解特性,先看 繫結構 如上所示,知道其支援 序列化,轉殖,迭代器操作,佇列特性。具體實現 除了實現以上介面外,擴充套件abstractcollection 抽象類。2.應用場景 大炮打蒼蠅,還是鳥槍打野豬?工具應用要有場景 arraydeque 為雙端佇列,支援首部,尾部兩端的操作,...

JDK之ArrayDeque原始碼解讀 三

目錄 作用 獲取arraydeque的第乙個元素。如果arraydeque為null,丟擲異常。作用 獲取arraydeque的最後乙個元素。如果arraydeque為null,丟擲異常。作用 獲取arraydeque的第乙個元素。與getfirst 不同在於,如果arraydeque為null,則...

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...