[英]Collection using reference equality
在 Java 中是否可以創建使用引用相等(即==
)而不是equals()
方法的HashMap
?
使用IdentityHashMap
類。 這是HashMap
的變體,其中使用==
和System.identityHashCode()
代替Object.equals(Object)
和Object.hashCode()
。
請注意,此類故意違反了java.util.Map
的 API 契約,該契約要求鍵相等性基於equals(Object)
。
您可以覆蓋插入到 HashMap 中的對象的 equals 方法來測試引用相等性。
如:
public boolean equals(Object obj) {
return this == obj;
}
IdentityHashmap類隨標准 Java 一起提供。 來自 JavaDoc:
此類使用哈希表實現 Map 接口,在比較鍵(和值)時使用引用相等代替對象相等。 換句話說,在 IdentityHashMap 中,兩個鍵 k1 和 k2 被認為是相等的,當且僅當 (k1==k2)。 (在普通 Map 實現(如 HashMap)中,當且僅當 (k1==null ? k2==null : k1.equals(k2)) 時,兩個鍵 k1 和 k2 被認為是相等的。)
請注意,許多采用Map
的函數都假設它們將使用equals
而不是引用相等。 所以要小心你將IdentityHashmap
傳遞給哪些函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.