HashMap原始碼學習筆記

2021-10-14 08:09:02 字數 1726 閱讀 7364

hashmap----資料結構:

// 初始容量

static

final

int de****t_initial_capacity =

1<<4;

// 最大容量

static

final

int maxinum_capacity =

1<<30;

// 擴容因子

static

final

float default_load_factor =

0.75

;// 當新增乙個元素被新增到有至少treeify_threshold 個節點的桶中,桶中鍊錶將被轉化為樹形結構

final

int treeify_threshold =

8// 樹轉鍊錶

final

int untreeify_threshold =6;

// 陣列長度 > 64 && 鍊錶節點 > 8 ,鍊錶才能轉紅黑樹

static

final

int min_treeify_capacity =

64;

hashmap----建構函式:

// 1

public

hashmap()

// 2

public

hashmap

(int initalcapacity)

// 3

public

hashmap

(map <

?extendsk,

?extends

v> m)

// 4

public

hashmap

(int initialcapacity,

float loadfactor)

static

final

inttablesizefor

(int cap)

hashmap----put:

// put

public v put

(k key,v value)

// putval onlyifabsent == false不改變現有值, evict == true 建立狀態

final v putval

(int hash,k key,v value,

boolean onlyifabsent,

boolean evict)

}// hash

static

final

inthash

(object key)

// putmapenties

final

void

putmapentries

(map<

?extendsk,

?extends

v> m,

boolean evict)

else

for(map.entry<

?extendsk,

?extends

v> e : m.

entryset())}}

HashMap原始碼學習筆記

hashmap的底層主要是基於陣列和鍊錶來實現的,它之所以有相當快的查詢速度主要是因為它是通過計算雜湊碼來決定儲存的位置。hashmap中主要是通過key的hashcode來計算hash值的,只要hashcode相同,計算出來的hash值就一樣。如果儲存的物件對多了,就有可能不同的物件所算出來的ha...

學習筆記HashMap原始碼學習

hashmap hashmapextends abstractmap implements map,cloneable,serializable 繼承abstractmap類,實現頂層介面map介面 int default initial capacity 1 4 預設容量為16 int maxim...

HashMap原始碼筆記

預設的初始化容量為16 static final int default initial capacity 1 4 最大的容量,容量的值必須是2的冪並且小於最大的容量,最大值為2的30次方 static final int maximum capacity 1 30 載入因子預設值為0.75 sta...