hashmap是乙個雜湊表,它的儲存內容是鍵值對。
紫色部分代表雜湊表,每個元素後面都是乙個單鏈表的頭結點。
原始碼分析:
上面原始碼,
hashmap初始容量為
4個,最大容量為2的
30次冪,增長因子為
0.75
,在進行擴容時,擴容數量
=增長因子
*當前容量。第
90行,為對應的
hash
表
hashmapentry對已的結構:
1.當key
為null
時,在414
行先檢測
entryfornullkey
是否為空
1.1 如果不為空,在
422行直接更新
entryfornullkey
的value
,並返回對應的
hashmapentry
。 1.2 如果為空,在
415行和
485行出,
new
乙個hashmapentry
,然後賦給
entryfornullkey
。備註:key
為null
的時候,
entryfornullkey
是作為hashmap
的乙個變數,儲存
key為
null
的hashentry
的,並沒有將
key為
null
併入雜湊表中
2.當key
不為null
時,通過
key的
hashcode
找到雜湊表中的
index
,然後遍歷
index
位置下的鍊錶,通過
394行的比較(通過
hashcode
和key
的equals
共同確認是否是需要找的
entry
)2.1 如果找到,直接替換
value
2.2 如果未找到
2.2.1 在
404行,比較是否需要擴容,下面是擴容的方法:在
574行,擴容時以當前容量的
2倍進行擴容的。
2.2.2 然後通過
addnewentry
方法,將新的
entry
加入到裡面去。
2.2.3 在
addnewentry
中,即476
行,直接是
table[index]=new hashmapentry
,由此可見,每次
put的
entry
都在鏈頭。
1.當key==null
時,若entryfornullkey
!=null
,則直接將
entryfornullkey=null
。2.當key
!=null
時,尋找
entry
的方式和
put一樣,最終通過比對
hashcode
以及equals
比較,確認需要
remove
的entry
。
Hashmap的學習理解
一 hashmap的簡介概況 1.hash簡介 hashmap 是乙個雜湊表,它儲存的內容是鍵值對 key value 對映。hashmap 的實現不是同步的,這意味著它不是執行緒安全的。它的key value都可以為null。此外,hashmap中的對映不是有序的。hashmap 的例項有兩個引數...
對於hashmap的理解
對key求hashcode得到的值來選桶 對key求equals,如果相同則覆蓋,不相同則尾插成鍊錶 太長變成紅黑樹 取值的時候是插入的逆過程,通過求傳入的key的hashcode來選桶,桶裡的鍊錶挨個和傳入的key求equals,true則取value,false則繼續找下乙個。之前一直都是這麼理...
HashMap原理的理解
hashmap 首先根據key計算hash值,hashcode右移16位與hashcode異或計算 用hash值不用hashcode值是因為hashcode 32位 太大不方便計算,並且得到答案的概率不均衡。第二步 是根據hash值去計算陣列下標 n 1 hash 用這個不用hash值取餘計算因為二...