equals相等hashcode一定相等吗?反过来呢

,这个要不要考虑重没重写的情况,找了好几个八股文答案不一致,面试时回答错了-_-||,求正确答案#暑期实习##校招##实习#
全部评论
可以从这个角度理解:在无重合集合中插入一条数据的时候,会先判断hashCode是否相等,如果hashCode不相等,那么可以直接认为该集合中没有出现过这个数据;如果hashCode相等,会接着判断equals是否相等,因为会有哈希冲突,所以不能直接根据hashCode相等判断两个对象相等,如果equals也相等,才会认为集合中已经出现过该数据,。使用hashCode的原因是可以快速过滤掉不相等的,因为如果hashCode不相等那么equals也必然不相等。这也是为什么重写了equals就一定也要重写hashCode的原因,因为如果不重写的话,会出现equals相同但是hashCode不想等的情况,这就乱套了。从底层来说的话,hashCode是把对象的地址转换成数字,equals不重写的话比较的其实就是地址,结合哈希冲突就好理解了。
4 回复 分享
发布于 2022-04-07 20:28
我这么和你说吧,y=x*x,你把x当做equal,x相等y(equals)一定相等,你说y相等x一定相等吗
2 回复 分享
发布于 2022-04-08 11:01
结论:equals 相等的 hashcode一定相等,反之不一定。 原因:在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。  @河老师
1 回复 分享
发布于 2022-04-07 19:47
这,很基础,可以结合hashmap 理解
1 回复 分享
发布于 2022-04-16 11:56
点赞 回复 分享
发布于 2022-04-07 18:02
重写equals必须重写hashcode,所以重不重写,equals都是hashcode的充分不必要条件
点赞 回复 分享
发布于 2022-04-08 19:00
我觉得要看重写这两个方法的逻辑是怎么实现的
点赞 回复 分享
发布于 2022-04-26 10:59
equals相同代表对象值是相同的(地址可能不同),hashcode是对对象值进行hash运算,所以equals相等,hashcode必然相等
点赞 回复 分享
发布于 2022-05-04 01:40

相关推荐

杨柳哥:这不是普通人,那这个钱的是天才
点赞 评论 收藏
分享
2 3 评论
分享
牛客网
牛客企业服务