HashMap在我們的工作中應(yīng)用的非常廣泛,在工作面試中也經(jīng)常會(huì)被問到,對于這樣一個(gè)重要的集合模型我們有必要弄清楚它的使用方法和它底層的實(shí)現(xiàn)原理。HashMap是通過key-value鍵值對的方式來存儲(chǔ)數(shù)據(jù)的,通過put、get方法實(shí)現(xiàn)鍵值對的快速存取,這是HashMap最基本的用法。HashMap底層是通過數(shù)組和鏈表相結(jié)合的混合結(jié)構(gòu)來存放數(shù)據(jù)的。我們通過分析底層源碼來詳細(xì)了解一下HashMap的實(shí)現(xiàn)原理。
1、HashMap的初始化
在HashMap實(shí)例化時(shí)我們要了解兩個(gè)概念:初始容量和加載因子。HashMap是基于哈希表的Map接口實(shí)現(xiàn),初始容量是哈希表在創(chuàng)建時(shí)的容量。加載因子是哈希表在其容量自動(dòng)增加之前可以達(dá)到多滿的一種尺度。當(dāng)哈希表中的條目數(shù)超過了加載因子與當(dāng)前容量的乘積時(shí),則要對該哈希表進(jìn)行rehash操作(即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu)),從而哈希表將具有大約兩倍于當(dāng)前容量的新的容量。
以上是Java API中HashMap的構(gòu)造方法,其源碼如下:
1 static final int DEFAULT_INITIAL_CAPACITY = 16;//默認(rèn)初始容量16 2 static final int MAXIMUM_CAPACITY = 1 << 30;//定義最大容量 3 static final float DEFAULT_LOAD_FACTOR = 0.75f;//默認(rèn)負(fù)載因子0.75 4&n