我们需要覆盖哈希码方法吗?

时间:2013-09-21 15:52:34

标签: java

我正在查看java.lang.Object并在同一主题上阅读StackOverflow中的几个问题。

equals()方法用于确定两个对象的相等性。

基本上,如果你想要store an object in a collection (Map, Set, List),那么你必须根据文档中定义的合同实现equals和hashCode方法。

如果我错了,请纠正我,如果我没有将我的类存储在集合中,那么我不需要覆盖hashcode方法{{1方法就足够了。

5 个答案:

答案 0 :(得分:6)

这是对的。但是,如果你以后(很久就忘记了快捷方式)将它放入Map或Set中,事情就会严重崩溃。

答案 1 :(得分:2)

如果您要覆盖hashCode,建议覆盖equals,但这不是强制性的。支持此方法的好处是哈希表,例如HashMap提供的哈希表。

注意:因此,如果您确定您或其他任何人永远不会将您的类对象存储在哈希集合中,那么请跳过它。否则覆盖它。

答案 2 :(得分:1)

如果您没有将对象放入HashMap或类似的Collection / Map类型,那么您不要覆盖类中的hashCode函数。

答案 3 :(得分:0)

来自Object#equals javadoc:

  

请注意,一旦覆盖此方法,通常需要覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等对象必须具有相等的哈希码

这意味着,如果您要覆盖equals,那么最好覆盖hashCode以遵守此合同,但这不是必需的。

答案 4 :(得分:0)

覆盖hashCode()将有助于对Java中所有基于哈希的实现的健康分类。存储桶将根据hashCode()方法的值进行分配。