HashMap原始碼解讀(一)

2021-08-19 03:15:16 字數 1552 閱讀 1209

在我們面試過程中,經常會遇到要求說hashmap的底層實現,在jdk原始碼中,oracle公司給出了我們hashmap的原始碼,通過閱讀hashmap的原始碼,我們可以很清楚的知道hashmap是怎麼實現的。下面我們開始閱讀hashmap的原始碼吧。

public

class

hashmap

extends

abstractmap

implements

map, cloneable, serializable

public

final k getkey()

public

final v getvalue()

public

final string tostring()

/*** 計算hashcode

* 是由key的hashcode和value的hashcode進行異或產生的。

*/public

final

inthashcode()

public

final v setvalue(v newvalue)

/*** 結點比較,位址相同則相同,key和value相同則相同。

*/public

final

boolean

equals(object o)

return

false;

}}

hashmap一共4個建構函式,分別如下:

/**

* 預設建構函式,負載因子為預設的0.75

*/public

hashmap()

/*** 建構函式初始化 初始容量和負載因子

*/public

hashmap(int initialcapacity, float loadfactor)

/*** 建構函式初始化 初始容量

*/public

hashmap(int initialcapacity)

/*** 建構函式,對map進行複製構造hashmap

*/public

hashmap(map<? extends k, ? extends v> m)

//承接上面的方法

/** * implements map.putall and map constructor.

**@param m the map

*@param evict false,當剛開始構造的時候

*/final

void putmapentries(map<? extends k, ? extends v> m, boolean evict)

//超過閾值,進行擴容

else

if (s > threshold)

resize();

//遍歷map插入map的結點進入hashmap

for (map.entry<? extends k, ? extends v> e : m.entryset())

}}

HashMap原始碼解讀

一 建立乙個hashmap都做了哪些工作?mapmap new hashmap hahmap無參構造方法 public hashmap 可以看到設定了載入因子 預設0.75 閾值 預設容量16 預設載入因子0.75 12 table是hashmap內部資料儲存結構entry陣列。當hashmap的s...

HashMap原始碼解讀

今日閒來無事,擷取一段hashmap的 分析一下 int hash hash key 根據key 的hashcode 計算hash值 int i indexfor hash,table.length 根據hash值 計算出再陣列中的位置 for entrye table i e null e e.n...

HashMap原始碼解讀

hashmap原始碼分析 me 對集合檢視的迭代,hashmap的桶數加實際大小與時間成正比,也就是說,不可以把桶樹設定的太多或負載因子太小。o 對集合檢視的迭代需要與hashmap 例項的 容量 桶數 加上其大小 鍵值對映的數量 成比例的時間。因此,如果迭代效能很重要,則不要將初始容量設定得太高 ...