我最近一直在学习 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/