判断两个对象是否相等,为什么必须同时重写equals()和hashcode()方法

hashCode方法用于提高对象在散列存储结构中的查找速度,如HashMap和HashSet。当两个对象equals时,它们的hashCode必须相等。然而,hashCode相等的对象可能不equals。默认情况下,如果不重写hashCode,不能保证这个条件。因此,当对象作为散列集合的键或需要放入散列结构时,应同时重写equals和hashCode方法。
摘要由CSDN通过智能技术生成

分析&回答


两个对象 equals的时候,hashCode必须相等,但hashCode相等,对象不一定equals。

  • hashCode(散列值),并不能表现其唯一性,但是有离散性,其意义在于类似于进行hashMap等操作时,加快对象比较的速度,进而加快对象搜索的速度。
  • 如果没有重写 hashcode方法,使用Object自带的hashCode,无法保证两个对象equals的时候 hashCode 必须相等的条件。
  • 如果你的对象想放进散列存储的集合中(比如:HashSet,LinkedHashSet)或者想作为散列Map(例如:HashMap,LinkedHashMap等等)的Key时,在重写equals()方法的同时,必须重写hashCode()方法。

总结

  1. hashCode()方法存在的主要目的就是提高效率
  2. 如果你想把对象放到散列存储结构的集合中时,是必须要重写的

喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵呜刷题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值