我理解为什么为两个相等的(通过 equals
)对象提供相同的哈希码很重要。但反之亦然,如果两个对象具有相同的哈希码,它们是否必须相等?合同还有效吗?我找不到可能发生这种情况的示例,因为如果所有参与 equals 方法的属性也被用于覆盖 hashcode 方法,那么我们将始终使用相同的对象的相同 hashcode 。请评论。
原文由 Abidi 发布,翻译遵循 CC BY-SA 4.0 许可协议
我理解为什么为两个相等的(通过 equals
)对象提供相同的哈希码很重要。但反之亦然,如果两个对象具有相同的哈希码,它们是否必须相等?合同还有效吗?我找不到可能发生这种情况的示例,因为如果所有参与 equals 方法的属性也被用于覆盖 hashcode 方法,那么我们将始终使用相同的对象的相同 hashcode 。请评论。
原文由 Abidi 发布,翻译遵循 CC BY-SA 4.0 许可协议
hashCode
函数的目的是允许对象快速划分为已知不等于其自身集合之外的所有项目的事物集合。假设一个人有 1,000 个项目,并且将它们分成十个大小大致相等的集合。一次调用 hashCode
可以快速识别该项目不等于 900 项,而无需对这些项目中的任何一项使用 equals
。即使必须使用 equals
将该项目与其他 100 项进行比较,这仍然只是将其与所有 1000 项进行比较的成本的 1/10。实际上,即使在大型集合中, hashCode
通常会消除 99.9% 或更多的不相等项目,最多只留下少数要检查的项目。
原文由 supercat 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答767 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
如果两个对象具有相同的
hashcode
那么它们不一定相等。否则你会发现完美的散列函数。但恰恰相反:如果对象相等,则它们必须具有相同的
hashcode
。