当前位置: 首页 > 知识库问答 >
问题:

如果两个hashcode相等,即使两个对象不是来自同一类型,这有关系吗?

狄侯林
2023-03-14

假设我有两个类型aB,它们都有一个唯一的ID字段,下面是我通常如何实现equals()和hashCode()方法:

@Override
public boolean equals(Object obj) {
    return obj instanceof ThisType && obj.hashCode() == hashCode();
}

@Override
public int hashCode() {
    return Arrays.hashCode(new Object[] { id });
}

在这种情况下,如果aB都有一个1-arg构造函数来设置各自的ID字段,

java prettyprint-override">new A(1).equals(new A(1)) // prints true as expected,
new A(1).equals(new A(2)) // prints false as expected,
new A(1).equals(new B(1)) // prints false as expected.
new A(1).hashCode() == new B(1).hashCode() // prints true.

我考虑了以下两种方法:

@Override
public boolean equals(Object obj) {
    return obj != null && obj.hashCode() == hashCode();
}

@Override
public int hashCode() {
    return Arrays.hashCode(new Object[] { getClass(), id });
}

将类添加到hashCode生成中可以解决这个潜在的问题。你觉得呢?有必要吗?

共有1个答案

施阳夏
2023-03-14

对于不同类的对象,相同的hashCode()并不重要。hashCode()只表示对象可能是相同的。例如,如果hashset遇到相同的hashcode(),它将测试是否与equals()相等。

 类似资料:
  • 我有两个arraylist。employee类和user类的ArrayList。employee类将name、age、address作为字段。用户类将名称、年龄、地址作为字段。下面是两个列表 要检查用户是否和员工的地址相同。如果用户没有地址,则从员工处复制。

  • 本文向大家介绍两个对象值相同equals结果为true,但却可有不同的 hashCode,这句话对不对?相关面试题,主要包含被问及两个对象值相同equals结果为true,但却可有不同的 hashCode,这句话对不对?时的应答技巧和注意事项,需要的朋友参考一下 不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希值(hashCode)应当相同。Java 对于equals

  • 问题内容: 假设我有一个类A,而B,C,D是从A派生的。 如果我想知道所引用的对象的类型是什么,可以声明: 这是因为我确定从A派生的类只有B,C和D。 但是,如果我只想检查两个引用是否指向同一种对象,该怎么办? 所以像这样: 但是当然语法是错误的,如何在没有1000 if-else的情况下进行检查? 问题答案: 你的意思是 即使和属于相同的特定类,也应返回true 。 但是,如果与进行比较,则此方

  • 问题内容: Hashcode()和equals()的概念是 1)如果两个对象根据equal()相等,则在这两个对象中的每一个上调用hashcode方法应产生相同的哈希码。 另一个是 2)如果两个对象根据equal()不相等,则不需要在两个对象中的每一个上调用hashcode方法必须产生不同的值。 我尝试并理解了第一个,这是第一点的代码。 上面的程序为两个不同的对象提供了相同的哈希码。 有人可以用一

  • 问题内容: 我明白为什么为两个相等的(通过)对象提供相同的哈希码很重要。但是反之亦然,如果两个对象具有相同的哈希码,它们必须相等吗?合同还存在吗?我找不到一个可能发生这种情况的示例,因为如果所有使用equals方法的属性都被用来覆盖hashcode方法,那么我们将始终对相等的对象使用相同的hashcode。请评论。 问题答案: 如果两个对象相同,则它们不一定相等。否则,您将发现完美的哈希函数。 但

  • 本文向大家介绍两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?相关面试题,主要包含被问及两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?时的应答技巧和注意事项,需要的朋友参考一下 不对,两个对象的 hashCode() 相同,equals() 不一定 true。 代码示例: 执行的结果: str1:1179395 |