03.20 最直觀的理解:Java中hashCode()使用

最直觀的理解:Java中hashCode()使用

大家都知道,在Java中,常常會有基於散列值的集合,比如HashMap,HashTable等,這些集合往往採用哈希表的原理,通過對象的hashcode()方法獲取其哈希值,從而快速地從集合中查找自己想要查找的目標值。

舉個例子

假如現在一個集合中存儲了不同的10個值,如果想要從這10個值中查找某個目標值X,傳統的方法可能是挨個調用equals()方法,進行遍歷比較,最多比較10次即可獲得結果。

但是這樣的方法很明顯不符合我等程序猿的身份。

最直觀的理解:Java中hashCode()使用

於是Java利用hashcode值進行了改進,改進後的方法是這樣的:

在最初存入這10個值的時候,計算出每個對象的hashcode值並將其對10取餘,即可獲得一個小於10的下標

  1. 如果集合中位於這個下標的位置是空的,那就把當前對象存在該位置上;

  2. 如果該位置上已經存在元素了,那麼就調用equals()方法進行比較,相同的話,就不再重複存入

  3. 不同的話,採用一些哈希衝突解決的辦法(比如HashMap中採用的是拉鍊法

查詢的過程同理:

  1. 如果通過hashcode值發現某個位置為空,則說明該集合中不存在該對象,查找失敗;

  2. 如果發現不為空,則調用equals()進行比較,如果相同,則查找成功;

  3. 如果不同,則查找失敗。

這樣做的好處顯而易見,那就是調用equals()方法的次數大大降低,幾乎只需要一兩次就可以直接查找到目標值,很大的提高了查詢的效率。


分享到:


相關文章: