java重写equals为什么重写hashCode
原创 lido_me 发表于:2019-07-25 09:34:59
  阅读 :142   收藏   编辑

概念

equals:该方法用于比较两个对象是否相等

hashCode:及哈希值,是通过哈希函数计算得到的,该函数能保证相同的输入能够得到相同的输出,但不能保证不同的输入总能得到不同的输出,也就是说在量足够大的时候就会产生哈希冲突

总结

在java中的容器集合中,比如:Map,List,Set在底层都会用到散列表结构在Map、Set中是不容许重复的那么在存储时就需要判断当前容器是否已经存在在容器量很小的时候可以使用equals(时间复杂度为 O(n))但在量大的时候就需要hashCode(时间复杂度为O(1)),两个相同的对象,hashCode()一定相同,当量足够大时,不相同的输入是会产生相同输出的,这时候我们可以用 equals() 方法进一步判断两个对象是否相同

两个对象的 hashCdoe() 相同,它的 equals() 方法一定要返回 true,对吗?

答案肯定不对

所以在一个类中,最好同时重写 hashCode() 和 equals() 方法