从超类重写equals方法

时间:2019-10-19 08:27:56

标签: java oop

是当我们从超类重写equals()方法时所需的hashcode()方法的新实现。保持equals()和hashcode()之间的约定。

2 个答案:

答案 0 :(得分:0)

当您要在基于哈希的集合中使用该类时,必须保持equals和hashcode方法之间的契约,例如hashmap,hashset等,它们使用hashcode方法计算哈希索引,并使用equals方法检查相等性。否则,您可以忽略哈希码。请参考下面的URL,以获取有关在hashmap中覆盖等值和hashcode方法的更多信息。 https://www.thetechnojournals.com/2019/10/why-hashmap-key-should-be-immutable-in.html

答案 1 :(得分:0)

equalshashCode方法将(与任何其他方法一样)从超类继承。

如果那些仍然适合子类,则可以保持不变。

JDK中有一些示例:

  • Stack扩展Vector扩展AbstractList
  • Stack只是从equals继承Vector
  • Vectorequals覆盖AbstractList,但仅添加synchronized,然后仅调用super.equals
  • ArrayList也扩展了AbstractList,但它采用遵循相同逻辑的实现覆盖了equals,但由于它知道至少有一个参与者是一个参与者,因此效率更高。 ArrayList

但是请记住

  • 您现在将使用相同的代码比较所有组合中的Super <-> Super,Super <-> Sub,Sub <-> Sub实例
  • this.getClass()实际上可以是子类时,类似this的事物可能会返回意外的结果

如果这导致您的比较逻辑出现问题,则由您决定。