使用引用相等的集合

时间:2014-04-01 10:22:23

标签: java collections referenceequals

在Java中,是否可以创建使用引用相等而不是HashMap方法的equals()

3 个答案:

答案 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传递给。

的功能