JAVA的hashcode与equals

java内有散集合HashSet、HashMap以及HashTable,它们的底层都是源于hash实现的,hash即通过映射像 y=ax+b 一样将对象与某个值映射起来这样查找起来就快了很多,理论上查找时间是O(1),即查找每个元素花费的时间都一样,hashcode就相当于y,x就是具体的某个对象或基础数据,基于hashcode我们可以实现hash查找。
以HashMap为例,HashMap的具体实现中会用一个table保存已经存进去的对象的hashcode值,当我们存入数据会经过一下过程:
1、比较table中没有该hashcode值,没有它就可以直接存进去
2、如果存在该hashcode值, 就调用该hashcode指向对象的equals方法与新元素进行比较,不同则存进去,相同就放弃存储。
扩展:从以上步骤也可看出存在hashcode相同对象不同的情况,因此这就需要解决冲突了,即如何存储两个hash值一样的对象。

根据以上信息我们应当可以解释在重写hashCode同时,为什么必须重写equals方法,我们重写了hashcode,但equals实际上用的还是通过原来Object带的hashcode来比较两个对象是否一致的,因此为了保持一致我们重写了一个对象的hashcode时,同时需要将equals方法重写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值