2014-04-01 85 views
0

在Java中,可以創建使用引用等式而不是equals()方法的HashMap使用引用相等的集合

+1

你可以實現你自己的:) –

+0

你的意思是用==來做內容的平等嗎? –

+0

你是在談論「地圖」本身或其中的物品的平等嗎? – Paul

回答

5

使用IdentityHashMap類。這是HashMap的變體,其中使用==System.identityHashCode()代替Object.equals(Object)Object.hashCode()

請注意,此類有意違反java.util.Map的API合同,其中要求該關鍵相等基於equals(Object)

+0

作爲修正案,http://docs.oracle.com/javase/7/docs/api/java/util/IdentityHashMap.html – chiccodoro

+0

嘿,大家好,編輯狂熱有什麼用? –

+0

你看 - 我不敢編輯,我寧願給你鏈接作爲評論 - 儘管編輯是完美的。在StackOverflow中,我認爲這些「傢伙」對你的回答沒有任何粗魯的看法。 – chiccodoro

1

您可以重寫您插入到HashMap中的對象的equals方法以測試引用相等性。

如:

public boolean equals(Object obj) { 
    return this == obj; 
} 
1

IdentityHashmap類帶有標準的Java。來自JavaDoc:

該類使用哈希表實現Map接口,在比較鍵(和值)時,使用引用相等來代替對象相等。換句話說,在IdentityHashMap中,當且僅當(k1 == k2)時,兩個密鑰k1和k2被認爲是相等的。 (在正常Map實現(如HashMap的)兩個鍵k1和k2被認爲是相等的,當且僅當(K1 == NULL K2 == NULL:?k1.equals(K2)))

注意許多采用Map的函數假設它們將使用equals,而不是參考等式。所以要小心你將IdentityHashmap傳遞給哪個函數。