在我們面試過程中,經常會遇到要求說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 例項的 容量 桶數 加上其大小 鍵值對映的數量 成比例的時間。因此,如果迭代效能很重要,則不要將初始容量設定得太高 ...