java基础面试题汇总及简答(持续更新)

1、为什么重写了equals方法一定要重写hashcode方法

结论:

  • hashCode方法返回的哈希值决定了对象在像hashSet、hashMap等哈希集合中的位置,
    如果只重写了equals但没重写hashcode,那么就会在该对象进行哈希集合相关的存储时出现问题,比如两个equals为true的对象会出现在hashSet集合中,两个equals为true的key在hashMap中存在两个。

解析:

  • 哈希值是hashCode本地方法由对象推导出的一个整型值,一般两个内存地址不同的对象,哈希值基本不一样,但也有一样的情况,也就是哈希冲突。
  • 哈希集合的插入处理是这样的:先通过哈希值确认位置,如果哈希值冲突,则通过equals判断两个对象是否相等,如果equals相等,则两个对象是相等的对象,进行替换;否则两个对象不是相等的对象,要么线性探针,要么链表解决冲突;如果哈希值不冲突,则直接插入。
  • 所以在插入哈希集合时,都会先进行哈希值的判断,如果只重写了equals没重写hashcode,就会导致两个equals相等的对象,在一开始就因为hashcode不相等,直接在集合进行插入。
  • 因此,我们需要重写hashcode,使得其equals相等的情况下,也得保证其哈希值一样,这样在进行哈希集合的操作时才不会出现问题。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值