HashMap 擴容機制


data:2016-10-3 8:54


HashMap 執行原理

內部采用數組與鏈表的結合形式。 當put時,首先根據key的hash值(調用hashcode方法),來確定該key的value應該位于數組哪個位置。當hash值相同時,調用equal方法判斷是否為同一個數據,相同則省略(hashmap不能存一樣的值,應該是覆蓋關系),不同時,則加入該數組中鏈表的開頭(例如剛開始3號數組中的鏈表里面有數據 a->b->c, 之后put的一個數據d的key的hash值一樣,但是equal 不一樣,這時d添加到鏈表的開頭,此時鏈表的內容即為 d->a->b->c)


hashmap原理.jpg

為了使數據的查詢效率提高,所以每個鏈表最好只有一個值,這樣就不需要再去遍歷鏈表了。hash算法采用2^n容量,可以最大避免碰撞幾率。
static int indexFor(int h, int length) { return h & (length-1); }

Paste_Image.png

擴容機制: loadfactor 擴容因子。當數據容量超過 當前最大容量*loadfactor時,容量自動擴大2倍,并將當前的數據重新放入新的hashmap中。所以初始的定義大小為2^n的大小最佳。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容