Queue 原始碼閱讀

2021-10-02 04:58:53 字數 3300 閱讀 5912

僅大致過了下,有問題的請指出,謝謝。

1.8

佇列介面,抽象實現,優先順序佇列

雙端佇列介面,雙端佇列實現

deque

public

inte***ce

queue

extends

collection

public

abstract

class

abstractqueue

extends

abstractcollection

implements

queue

class

priorityqueue

extends

abstractqueue

public

inte***ce

deque

extends

queue

class

linkedlist

extends

abstractsequentiallist

implements

list

, deque

class

arraydeque

extends

abstractcollection

implements

deque

基於鍊錶實現的雙端佇列。

介紹略。主要是實現了deque的進offer、出poll、取peek系列函式。

基於陣列實現的雙端佇列。

transient為了自定義序列化,減少儲存損耗。

head和tail儲存頭尾索引。

最小容量為8.

transient object[

] elements

transient

int head

transient

int tail

private

static

final

int min_initial_capacity =

8

預設容量:16

指定容量:需大於min_initial_capacity =8,且保證容量為2的指數倍,保證方法calculatesizeheadtail取預設值,0(成員變數賦對應型別預設零值)

public

arraydeque()

public

arraydeque

(int numelements)

// 測試:傳入9,返回16;傳入17,返回32

private

static

intcalculatesize

(int numelements)

return initialcapacity;

}

預設:尾部進

public

void

addlast

(e e)

擴容方法為:doublecapacity()前提:容量滿

大致流程:

1. 儲存索引:head、tail、當前容量…

2. 計算新容量:elements.length << 1

3. 防止超出型別值int範圍

4. 分配記憶體

5. 賦值並移動:由於陣列隊列為迴圈結構,需使用兩次system.arrcopy;另外,head置0,tail置原長度

private

void

doublecapacity()

預設:首部出

public e pollfirst()

public

intsize()

public

boolean

isempty()

基於陣列實現的優先順序佇列。

預設容量:11

預設比較器:null

private

static

final

int default_initial_capacity =11;

transient object[

] queue

private

int size =

0private

final comparator<

?super e> comparator

transient

int modcount =

0

容量小於64,容量增加一倍;容量大於等於64,容量增加50%。

private

void

grow

(int mincapacity)

預設尾部進,向上調整

public

boolean

offer

(e e)

private

void

siftupcomparable

(int k, e x)

queue[k]

= key;

}

預設首部出,取尾部元素複製給queue[0],向下調整

public e poll()

private

void

siftdowncomparable

(int k, e x)

queue[k]

= key;

}

迭代器遍歷陣列,即堆按照自頂向下,自左向右的方式遍歷。

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

原始碼閱讀 Glide原始碼閱讀之with方法(一)

前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...

佇列Queue原始碼分析

定義 佇列是 只允許在一端進行插入操作,而在另一端進行刪除操作的線性表 缺點 出棧複雜度高,容易造成假溢位 可能對頭有很多空位置,此時插入放到了隊尾,就可能造成溢位,此時叫做假溢位 解決辦法 迴圈佇列 把頭尾相接的循序儲存結構稱為迴圈佇列 可以解決假溢位 佇列的鏈式儲存及結構模式 佇列的鏈式儲存及結...