java - 如果该类不用作 HashMap 中的键,是否有任何实际意义来覆盖哈希码?

标签 java hashmap key hashcode

我最近一直在学习 hashCode 函数和 HashMap,并尝试为自己的类创建自己的 hashCode 函数。根据我所做的研究,从实际角度来看,需要重写 hashCode 的唯一原因似乎是该类将用作 HashMap 中的键,或者 hashCode 函数在其他地方使用。我知道它是要重写的 equals 和 hashCode 契约的一部分,将来另一个用户可能想在 HashMap 中使用它,但为了理解,我想知道该类是否从未使用过作为键,我还需要重写 hashCode 函数吗?

最佳答案

每当你实现equals时,你应该始终实现hashCode,因为即使从未将你的对象放入HashMap中,你也不知道您正在使用的库可能会做什么。库可以自由地依赖您对象的 hashCode 而无需通知您。

即使您的 IDE 自动生成 hashCode 以及 equals,或者即使它只是

public int hashCode() {
    raise RuntimeException("This type doesn't support hashCode (for now).");
}

您永远不应该让您的 hashCode 与您的 equals 不一致。

关于java - 如果该类不用作 HashMap 中的键,是否有任何实际意义来覆盖哈希码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44117763/

相关文章:

java - 如何在 Java 8 中将字符流转换为字符串

java - 在 HashMap 中搜索值

Java:这足以删除对象吗?

c# - 如何创建唯一的激活码?

cryptography - 为什么替换密码的 key 空间是因子 N

java - 数组拆分字符串问题

java - 使用 Java (Netbeans) 中的另一个表单中的数据填充一个表单

java - 无法删除文件

java - 从 hashmap.values() 初始化的列表中删除一个项目时会发生什么?

c# - 获取字典中最大的键