簡體   English   中英

HashMap沒有調用Object.equals?

[英]HashMap Not Calling Object.equals?

我編寫了一個類來覆蓋類Object中的equals(Object)方法,以使用對象的實例值將類類型的對象與類類型的其他對象進行比較。

當我將一個對象的實例作為鍵放在HashMap中,然后在地圖上調用get(Object)時,一個新的但相同的對象作為鍵,它返回null。

我已經嘗試將一個新的,相同的對象傳遞給equals方法,它返回true,所以問題不是我的比較代碼。

從我通過調試收集到的內容,我的對象中的equals(Object)方法永遠不會被調用。

但是,如果在HashMap中使用String鍵,然后將具有相同字符的新實例傳遞給get(Object),則會成功返回該值。

為什么會這樣? 如何根據MY equals方法獲取HashMap測試鍵?

您還需要覆蓋Object.hashcode() 看看鏈接,因為它指定hashcode()equals()有一個契約,以確保在HashTableHashMapHashSet的正確功能。

HashMap ,值存儲在桶中,桶由密鑰的哈希碼到達。 找到合適的存儲桶后,將equals方法應用於存儲桶的每個成員,直到確定相等為止。 因此,確保您的哈希算法“哈希”很重要。

您還應該覆蓋hashCode,否則它將無法工作,因為HashMap(顧名思義)等同於基於散列集合的相等性。 用於覆蓋equals的Java“榮譽代碼”是您還應該同時覆蓋hashCode。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM