大家都知道,在Java中,常常會有基於散列值的集合,比如HashMap,HashTable等,這些集合往往採用哈希表的原理,通過對象的hashcode()方法獲取其哈希值,從而快速地從集合中查找自己想要查找的目標值。
舉個例子
假如現在一個集合中存儲了不同的10個值,如果想要從這10個值中查找某個目標值X,傳統的方法可能是挨個調用equals()方法,進行遍歷比較,最多比較10次即可獲得結果。
但是這樣的方法很明顯不符合我等程序猿的身份。
於是Java利用hashcode值進行了改進,改進後的方法是這樣的:
在最初存入這10個值的時候,計算出每個對象的hashcode值並將其對10取餘,即可獲得一個小於10的下標
如果集合中位於這個下標的位置是空的,那就把當前對象存在該位置上;
如果該位置上已經存在元素了,那麼就調用equals()方法進行比較,相同的話,就不再重複存入
不同的話,採用一些哈希衝突解決的辦法(比如HashMap中採用的是拉鍊法)
查詢的過程同理:
如果通過hashcode值發現某個位置為空,則說明該集合中不存在該對象,查找失敗;
如果發現不為空,則調用equals()進行比較,如果相同,則查找成功;
如果不同,則查找失敗。
這樣做的好處顯而易見,那就是調用equals()方法的次數大大降低,幾乎只需要一兩次就可以直接查找到目標值,很大的提高了查詢的效率。
閱讀更多 程序猿小白醬 的文章