猿问

为什么我需要覆盖Java中的equals和hashCode方法?

为什么我需要覆盖Java中的equals和hashCode方法?

最近我读了这个 Developer Works文档

该文档是关于定义hashCode()equals()有效和正确的,但我无法弄清楚为什么我们需要覆盖这两种方法。

如何有效地实施这些方法?


烙印99
浏览 592回答 4
4回答

犯罪嫌疑人X

您必须覆盖覆盖equals()的每个类中的hashCode()。如果不这样做,将导致违反Object.hashCode()的常规合同,这将阻止您的类与所有基于散列的集合(包括HashMap,HashSet和Hashtable)一起正常运行。   来自Effective Java,来自Joshua Bloch通过定义equals()和hashCode()一致,您可以提高类的可用性作为基于散列的集合中的键。正如hashCode的API文档所解释的那样:“支持这种方法是为了哈希表的好处,例如那些提供的哈希表java.util.Hashtable。”关于如何有效实现这些方法的问题的最佳答案是建议您阅读Effective Java的第3章。
随时随地看视频慕课网APP

相关分类

Java
我要回答