一尘不染

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

java

我在很多地方读到说equals Java中的覆盖方法时,也应该覆盖hashCode方法,否则就是“违反合同”。

但是到目前为止,如果我仅覆盖equals方法,而不覆盖hashCode方法,则不会遇到任何问题。

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


阅读 340

收藏
2020-03-15

共1个答案

一尘不染

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

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

如果你有两个对象.equals(),但是具有不同的哈希码,则会输掉!

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

2020-03-15