在Java中,是否可以创建使用引用相等而不是HashMap
方法的equals()
?
答案 0 :(得分:5)
使用IdentityHashMap
课程。这是HashMap
的变体,其中==
和System.identityHashCode()
代替Object.equals(Object)
和Object.hashCode()
。
请注意,此类故意违反了java.util.Map
的API合约,其中要求密钥相等性基于equals(Object)
。
答案 1 :(得分:1)
您可以覆盖插入HashMap的对象的equals方法以测试引用相等性。
如:
public boolean equals(Object obj) {
return this == obj;
}
答案 2 :(得分:1)
IdentityHashmap类附带标准Java。来自JavaDoc:
此类使用哈希表实现Map接口,在比较键(和值)时使用引用相等性代替对象相等性。换句话说,在IdentityHashMap中,当且仅当(k1 == k2)时,两个密钥k1和k2被认为是相等的。 (在正常的Map实现中(如HashMap),当且仅当(k1 == null?k2 == null:k1.equals(k2))时,两个键k1和k2被认为是相等的。)
请注意,许多使用Map
的函数假定它们将使用equals
,而不是引用相等。因此,请注意将IdentityHashmap
传递给。