在Java中是否可以创建HashMap
使用引用相等(即==
)而不是equals()
方法?
问问题
610 次
3 回答
6
使用IdentityHashMap
类。这是HashMap
其中使用==
andSystem.identityHashCode()
代替Object.equals(Object)
and的变体Object.hashCode()
。
请注意,此类故意违反 API 合同,java.util.Map
该合同要求密钥相等性基于equals(Object)
.
于 2014-04-01T10:24:05.303 回答
1
您可以覆盖插入到 HashMap 中的对象的 equals 方法来测试引用相等性。
如:
public boolean equals(Object obj) {
return this == obj;
}
于 2014-04-01T10:23:39.597 回答
1
IdentityHashmap类随标准 Java 提供。来自 JavaDoc:
此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等代替对象相等。换句话说,在 IdentityHashMap 中,当且仅当 (k1==k2) 时,两个键 k1 和 k2 才被认为相等。(在正常的 Map 实现(如 HashMap)中,当且仅当 (k1==null ? k2==null : k1.equals(k2)) 时,才认为两个键 k1 和 k2 相等。)
请注意,许多使用Map
s 的函数都假设它们将使用equals
,而不是引用相等性。所以要小心你传递IdentityHashmap
给哪些函数。
于 2014-04-01T10:27:34.987 回答