LinkedHashMap原始碼解析

2021-10-05 09:32:53 字數 2414 閱讀 1049

繼承自hashmap結構,實現了按照插入順序進行訪問和按照訪問順序,其目的是把很久沒有訪問的key刪除

這裡需要注意一點,after不是hashmap裡的next

/**

* 煉表頭

*/transient linkedhashmap.entry

head;

/** * 鍊錶尾

*/transient linkedhashmap.entry

tail;

/** * 控制兩種訪問模式的字段,預設false

* true 按照訪問順序

* false 按照插入順序

*/final

boolean accessorder;

/**

* 構造乙個按插入順序的例項

* 預設的初始容量是16,載入因子時0.75

*/public linkedhashmap(

)

按照新增順序新增

使用方式

public

class

test

}}

執行結果

1:1

2:23:3

4:45:5

linkedhashmap繼承了hashmap,重寫了put方法中的新建節點方法newnode、newtreenode、afternodeaccess方法,新增節點直接追加到鍊錶尾部,所以可以按照鍊錶插入順序訪問

//新增節點,並追加到鍊錶尾部

node

newnode

(int hash, k key, v value, node

e)private

void

linknodelast

(linkedhashmap.entry

p)}

訪問最少刪除策略

使用方式

linkedhashmap

map=

newlinkedhashmap

(4,0.75f

,true

)@override

protected

boolean

removeeldestentry

(map.entry eldest)};

iterator iterator= map.

entryset()

.iterator()

;while

(iterator.

hasnext()

) system.out.

println

("--------");

integer num=map.

get(20)

; system.out.

println

(num)

; system.out.

println

("--------");

iterator iterator1= map.

entryset()

.iterator()

;while

(iterator1.

hasnext()

)

執行結果

9:10

20:20

22:22

--------

20--------

9:10

22:22

20:20

重寫了hashmap的get方法

public v get

(object key)

put方法

這個裡實現了put的時候的刪除操作

void

afternodeinsertion

(boolean evict)

}

訪問的時候通過afternodeaccess將元素放到末尾

public v get(object key)

void afternodeaccess(node e)

tail

= p;

++modcount;

}}

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...

ThreadPoolExecutor原始碼閱讀

執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...

OrangePi One Android 原始碼編譯

一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...