全部评论
可以从这个角度理解:在无重合集合中插入一条数据的时候,会先判断hashCode是否相等,如果hashCode不相等,那么可以直接认为该集合中没有出现过这个数据;如果hashCode相等,会接着判断equals是否相等,因为会有哈希冲突,所以不能直接根据hashCode相等判断两个对象相等,如果equals也相等,才会认为集合中已经出现过该数据,。使用hashCode的原因是可以快速过滤掉不相等的,因为如果hashCode不相等那么equals也必然不相等。这也是为什么重写了equals就一定也要重写hashCode的原因,因为如果不重写的话,会出现equals相同但是hashCode不想等的情况,这就乱套了。从底层来说的话,hashCode是把对象的地址转换成数字,equals不重写的话比较的其实就是地址,结合哈希冲突就好理解了。
我这么和你说吧,y=x*x,你把x当做equal,x相等y(equals)一定相等,你说y相等x一定相等吗
结论:equals 相等的 hashcode一定相等,反之不一定。 原因:在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。 @河老师
这,很基础,可以结合hashmap 理解
顶
重写equals必须重写hashcode,所以重不重写,equals都是hashcode的充分不必要条件
我觉得要看重写这两个方法的逻辑是怎么实现的
equals相同代表对象值是相同的(地址可能不同),hashcode是对对象值进行hash运算,所以equals相等,hashcode必然相等
相关推荐
点赞 评论 收藏
分享