在hash碰撞的情況下冻璃,主要的處理方法有:
1.開(kāi)放地址法
開(kāi)放地執(zhí)法有一個(gè)公式:Hi=(H(key)+di) MOD m i=1,2,…,k(k<=m-1)
基本思想:當(dāng)發(fā)生地址沖突時(shí),按照某種方法繼續(xù)探測(cè)哈希表中的其他存儲(chǔ)單元拌牲,直到找到空位置為止俱饿。
2.rehash(再hash法)
使用第二個(gè)或第三個(gè)...計(jì)算地址歌粥,知道無(wú)沖突塌忽。比如:按首字母進(jìn)行hash沖突了,則按照首字母第二位失驶,進(jìn)行hash尋址土居。
3.鏈地址法(拉鏈法)
創(chuàng)建一個(gè)鏈表數(shù)組,數(shù)組中每一格就是一個(gè)鏈表。若遇到哈希沖突擦耀,則將沖突的值加到鏈表中即可棉圈。
java hashmap使用的就是拉鏈法解決hash碰撞。
Image.jpg
Image.png
哈希表是由鏈表+數(shù)組組成眷蜓。
通過(guò)hash(key)%len存儲(chǔ)到相對(duì)應(yīng)的數(shù)組中分瘾,如140%16=12.意味著數(shù)組下標(biāo)相同,并不表示hashCode相同吁系。