我在很多地方读到说equals Java中的覆盖方法时,也应该覆盖hashCode方法,否则就是“违反合同”。
equals
hashCode
但是到目前为止,如果我仅覆盖equals方法,而不覆盖hashCode方法,则不会遇到任何问题。
什么合同 为何我在违反合同时没有遇到任何问题?如果没有重写hashCode方法,在哪种情况下会遇到问题?
你将遇到的问题是集合,其中元素的唯一性是根据.equals()和计算的.hashCode(),例如HashMap。
.equals()
.hashCode()
HashMap
顾名思义,它依赖于哈希表,哈希存储桶是对象的函数.hashCode()。
如果你有两个对象.equals(),但是具有不同的哈希码,则会输掉!
合同中重要的部分是:必须具有相同的对象.equals().hashCode()。
.equals().hashCode()