java - 如果我重写 equals 并且不使用任何哈希集合,是否有必要重写哈希码

标签 java equals hashcode

我有一个对象,我只是想覆盖equals 方法来比较两个对象,我没有在我的程序中的任何地方使用任何散列集合。在这种情况下,为什么 hashCode 和 equals 方法中存在契约,即如果两个对象相等,那么它们应该具有相同的哈希码。 如果您想将此对象作为某个使用散列然后覆盖它的集合中的键,那么一般的哈希码契约(Contract)不应该是特定于大小写的吗??

最佳答案

我会说是的,因为您不知道您(或更重要的是,另一个开发人员)将来是否想使用散列将它们放入一个集合中。这可以是直接的,也可以是间接的,即您可以将您的对象传递给另一个不是您编写的方法,并且该另一个方法在其实现中使用散列集合。

关于java - 如果我重写 equals 并且不使用任何哈希集合,是否有必要重写哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10546106/

相关文章:

java - ThreadLocal 和列表不起作用

java - 什么时候在 Java 中使用引用相等与对象相等比较合适?

java - 不调用重写的 equals

Java hashcode() 字符串冲突

java - Java 类中的 @overriding equals() 和 hashCode()

Java - 编辑图像

java - 在 Java 中使用跨多个类的扫描器?

java - 如果对象在 ArrayList 中,我该如何更改它?

java - 从多个字段生成哈希码?

Java类反编译和重新编译