为什么重写了equals必须要重写hashCode方法:


因为你如果添加了eq,那必定是希望去和其他的对象做内容的比较,或者看集合或者是数组中是否包含此对象,针对第一种情况,如果已经确定了比较的对象,那么在比较的时候不会有太大的问题,只是会违反java规范约定,但是如果是要看集合或者是数组中是否包含此对象,问题就出现了,比如集合的contains(obj),首先会计算obj的hashcode值,Object默认的hashcode值是地址值,如果在数组中不存在hashcode为该obj的地址值的话,那么就会视为找不到,即使找到内容大概率也不同,并且还有第三种情况,就是在将obj存储到数组中时,会先计算hashCode值,如果该对象不重写hashCode,那么每次生成的hashCode值都不一样,虽然减少了hash冲突,但是由于频繁的扩容反倒会导致插入的效率变低

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值