簡體   English   中英

java.util.HashMap get:密鑰是否必須與存儲在HashMap中的對象完全相同,或者密鑰可以只是“相等”

[英]java.util.HashMap get: does key have to be exactly the same object as what is stored in the HashMap, or can the keys just be “equal”

假設我有一個HashMap M 我想在此HashMap上調用“ get”函數,並找到與給定對象S關聯的值。 但是我沒有對對象S的實際引用,因此我創建了一個新對象S_new其內容與S的內容相同。 如果我調用M.get(S_new) ,那會給我與鍵S關聯的值嗎?

Map#get的文檔中

public V get(Object key)

返回指定鍵所映射到的值;如果此映射不包含鍵的映射關系,則返回null。 更正式地講,如果此映射包含從鍵k到值v的映射,使得(key==null ? k==null : key.equals(k)) ,則此方法返回v 否則返回null (最多可以有一個這樣的映射。)

因此,只要您傳遞的參數以使映射鍵被視為等效的方式覆蓋equals ,就可以使用其他實例從映射中檢索值。

另外,正如@Eugene和其他人提到的那樣,對於HashMap您還必須重寫hashCode方法,並確保您的實例返回與鍵相同的值。 通常,最佳實踐是確保相等實現是對稱的 (即A.equals(B) <==> B.equals(A) ),並且相等的值應具有相同的hashCode

是的,只要hashcodeequals會產生相同的精確值,就可以。 還要注意, get甚至不需要參數為T它是Object ,因此any滿足哈希碼和equals的類型都可以工作

不可以使用鍵從地圖中獲取價值,並不意味着鍵應該與放置時使用的對象相同。

唯一的問題是hashcode&equals應該相同,這就是如果您想使用自己的類對象作為鍵的原因,它必須重寫Hashcode&equals方法。

暫無
暫無

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

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