Hash如何存資料
hash表的本質其實就是陣列,hash表中通常存放的是鍵值對Entry,
如下圖:

這里的學號是個key,哈希表就是根據key值來通過哈希函式計算得到一個值,這個值就是下標值,用來確定這個Entry要存放在哈希表中哪個位置,
Hash碰撞
hash碰撞指的是,兩個不同的值(比如張三、李四的學號)經過hash計算后,得到的hash值相同,后來的李四要放到原來的張三的位置,但是陣列的位置已經被張三占了,導致沖突,
解決方法
hash碰撞的解決方式是開放尋址法和拉鏈法,
開放尋址法指的是,當前陣列位置1被占用了,就放到下一個位置2上去,如果2也被占用了,就繼續往下找,直到找到空位置,

拉鏈法采用的是鏈表的方式,這個時候位置1就不單單存放的是Entry了,此時的Entry還要額外保存一個next指標,指向陣列外的另一個位置,將李四安排在這里,張三那個Entry中的next指標就指向李四的這個位置,也就是保存的這個位置的記憶體地址,如果還有沖突,就把又沖突的那個Entry放到一個新位置上,然后李四的Entry指向它,這樣就形成一個鏈表,

總結起來:開放尋址法和拉鏈法都是想辦法找到下一個空位置來存發生沖突的值,
更多 Java 教程:https://www.javastack.cn/java/
來源:blog.csdn.net/zsyoung/article/details/114505480
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2022最新版)
2.勁爆!Java 協程要來了,,,
3.Spring Boot 2.x 教程,太全了!
4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優雅的方式!!
5.《Java開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511920.html
標籤:其他
上一篇:Java中如何使用Scanner類讀取.txt檔案呢?
下一篇:深入理解Lambda運算式
