1

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

4

3 回答 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 相等。)

请注意,许多使用Maps 的函数都假设它们将使用equals,而不是引用相等性。所以要小心你传递IdentityHashmap给哪些函数。

于 2014-04-01T10:27:34.987 回答