有关equals和hashCode的更多信息

时间:2014-12-09 19:52:05

标签: java hashcode

我了解equalshashCode方法之间的合约。如果覆盖equals,则hashCode也应该被覆盖。我可以覆盖hashCode方法以始终返回相同的值,比如int 23吗?我可以覆盖hashCode方法以在每次调用时返回一个随机数吗?

1 个答案:

答案 0 :(得分:5)

您不应该覆盖hashCode以返回随机值。它应该始终为同一个实例返回相同的值。

Javadoc

中明确说明了这一点
  

每当在Java应用程序执行期间多次在同一对象上调用它时,hashCode方法必须始终返回相同的整数,前提是不修改对象上的equals比较中使用的信息。

您不应该返回一个常量值,因为在hashCodeHashMap等类中使用时会导致非常差HashSet

这在Javadoc中也有提及:

  

如果两个对象根据equals(java.lang.Object)方法不相等,则不需要在两个对象中的每一个上调用hashCode方法必须生成不同的整数结果。但是,程序员应该知道为不等对象生成不同的整数结果可能会提高哈希表的性能。