Java中hashCode和equals方法之间的关系[duplicate]

这个问题在这里已经有答案了
在Java中重写equals和hashCode时应该考虑哪些问题?

(11个答案)
为什么我需要重写Java中的equals和hashCode方法?

(31个答案)

8年前关闭的

我在很多地方读到过这样的话,在Java中重写equals方法时,也应该重写hashCode方法,否则就是“违反合同”

但到目前为止,若我只重写equals方法,而不重写hashCode方法,那个么我并没有遇到任何问题

合同是什么?为什么我在违反合同时没有遇到任何问题?在这种情况下,如果我没有重写hashCode方法,我会遇到问题吗

您将遇到的问题是,在集合中,元素的唯一性是根据.equals().hashCode()计算的,例如HashMap中的键

顾名思义,它依赖于哈希表,哈希桶是对象的.hashCode()的函数

如果有两个对象是.equals(),但具有不同的哈希代码,则会丢失

合同中重要的一部分是:属于.equals()的对象必须具有相同的.hashCode()

这些都记录在javadoc中,用于对象。约书亚·布洛赫说你必须用有效的Java来做。说够了

发表评论