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的大小最佳。