慕無(wú)忌7406412
TA貢獻(xiàn)4條經(jīng)驗(yàn) 獲得超1個(gè)贊
HashMap底層采用數(shù)組加鏈表的方式實(shí)現(xiàn),位桶數(shù)組默認(rèn)大小是16(必須是2的整數(shù)次冪),當(dāng)數(shù)組里面的元素裝滿3/4的時(shí)候就會(huì)自動(dòng)擴(kuò)容,一般是原來(lái)的兩倍大小。所謂的哈希碰撞就是你put一個(gè)鍵值對(duì)進(jìn)去時(shí),首先會(huì)調(diào)用key的hashcode()方法產(chǎn)生一個(gè)哈希碼,再調(diào)用hash()方法產(chǎn)生一個(gè)哈希值,這個(gè)哈希值就是位桶數(shù)組的索引。如果此時(shí)位桶數(shù)組該索引位置已經(jīng)放了鍵值對(duì)進(jìn)去了,就產(chǎn)生了哈希碰撞。此時(shí)會(huì)采取單向鏈表的方式,調(diào)用key的equals()方法挨個(gè)比較鏈表里節(jié)點(diǎn)的key值,若返回true,則用新的value值覆蓋原來(lái)的value值,否則讓最后一個(gè)節(jié)點(diǎn)指向你put進(jìn)去的鍵值對(duì)。
查看完整回答