開發者學堂課程【Java面試疑難點串講1:面試技巧及語言基礎:Hash 沖突】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/24/detail/483Hash 沖突
1.HashMap中 Hash 沖突嚴重時會影響 HashMap 性能,如何解決。
在整個的 Hash 存儲過程之中,必須要明确兩個實際的問題:hashCode()與equal()兩個方法。如果 hashCode()相同,這個時候會查詢 equals(),不過一般在使用Map的時候都會考慮使用 string 來實作,是以在 string 實作的 Key 裡面是不存在這種複雜的概念,也就是說這樣的概念隻存在于自定義類裡面,是以當 Hash 突嚴重的時候,首先先去考慮 equals()方法是否正常。
那麼在進行資料定位的時候會更加的快速。
但是如果從實際的資料結構的算法來講,如果真的有哈希沖突那麼就需要使用一些特定的處理方法。
• 開放定址法,為一個哈希沖突求的一個位址序列;
• 鍊位址法。将所有哈希沖突的内容儲存在一個連結清單裡面(HashMap 的實作原理);
• 再哈希法,重新做一個 Hash 計算;
在 HashMap 源代碼之中,主要觀察 Node 類(子類定義的預設内部類)、Map.Entry (内部接口)類,這兩個都是内部類。