天天看點

Java常見面試題:HashMap沖突

HashMap中Hash沖突嚴重時會影響HashMap性能,該如何解決?

在整個Hash存儲過程之中,必須要明确兩個實際問題:hashCode()與equals()兩個方法。如果hashCode()相同,這個時候會查詢equals(),不過一般在使用Map的時候都會考慮使用String來實作,是以在String實作的Key裡面不存在這種複雜的概念,也就是說這樣的概念隻存在于自定義類裡面,是以當Hash沖突嚴重時,首先去考慮equals()方法是否正常,那麼在進行資料定位的時候會更加快速。

如果從實際的資料結構的算法來講,真的有Hash沖突,那麼就需要使用一些特定的處理方法:

(1) 開放定址法:為一個Hash沖突求一個位址序列;

(2) 鍊位址法:将所有Hash沖突的内容儲存在一個連結清單裡面(HashMap實作原理);

(3) 再哈希法:重新做一個Hash計算。

在HashMap源代碼之中,主要觀察Node類(子類定義的預設内部類)、MapEntry(内部接口)類,這兩個都是内部類。

更多專業知識,面試技巧就在阿裡雲開發者社群,持續更新中……

感謝浏覽~

本内容來源于

阿裡雲大學-Java面試技巧