當談到Java中工作哈希和HashSet的方式時,我有些懷疑。在Java中哈希函數的誤解和在HashSet中包含的工作
我們知道下面的假設,我們應該fullfil:
if elements are equals then also their hashes are equals
換句話說:
a.equals(b) ---> a.hashCode() == b.hashCode()
但是,我們不能說
a.hashCode() == b.hashCode() ---> a.equals(b)
的問題是我讀過的包含HashSet
計算散列h
,並且th只搜索元素中的哈希h
。它不會將equals
稱爲h
的桶元素 - 它僅包含hashCode
。這意味着我們contains
可以返回錯誤的答案,如果元素具有等於散列,但equals
返回false
(正如我上面提到的,這是可能的)。
'a.hashCode() == b.hashCode()'並不意味着'a.equals(b)' – dehasi
哈希碼不用於兩個值之間的比較。它只是用來均勻地分割值,以便可以檢查和比較數量較小的數值,從而更快速地進行比較。 – jiaweizhang