effectiveJava覆盖equals时总要覆盖hashcode

Posted Mr_邓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了effectiveJava覆盖equals时总要覆盖hashcode相关的知识,希望对你有一定的参考价值。

  在每个覆盖了equals方法的类中,也必须要覆盖hashcode方法。如果不这样做的话,就会违反Object.hashcode的通用约定,从而导致该类无法结合所有基于散列的集合一起正常运作,这样的集合包括HashMap、

HashSet、Hashtable.

  Object规范:

  在应用程序的执行期间,只要对象的equals方法的比较操作所作用到的信息没有被修改,那么对这同一对象调用多次,hashCode方法都必须返回同一个整数。在同一个应用程序的多次执行过程中,每次执行返回的整数可以不一致。

  如果两个对象根据equals方法比较是相等的,那么调用这两个对象中任意一个对象的hashcode方法必须产生同样的结果

  如果两个对象根据equals方法比较是不相等的,那么调用这两个对象中任意一个对象的hashCode方法,则不一定要产生不同搞得整数结果。但是,给不相等的对象产生截然不同的整数结果,有可能提高散列列表的性能。

 

以上是关于effectiveJava覆盖equals时总要覆盖hashcode的主要内容,如果未能解决你的问题,请参考以下文章

覆盖equals()时总要覆盖hashCode()

覆盖equals时总要覆盖hashCode

Java 对象 覆盖equals时总要覆盖hashCode

第9条:覆盖equals时总要覆盖hashCode

覆盖equals时总要覆盖hashCode

Effective Java 第九条:覆盖equals时总要覆盖hashCode