java重写equals(Object obj)与重写hashCode()之间的关系

多年前,在我开始学习java语法的时候,我就听到了一条规则。

重写equals方法就必须要重写hashcode方法,但是重写equals方法有一些规则,重写hashcode方法却貌似没有什么规则似的,搞的我一直都云里雾里的,总以为是equals方法的底层调用了hashcode方法之类的。

时隔多年,我终于理解了为什么会有“重写equals方法就必须要重写hashcode方法”这一规则。是说hashcode这个方法是在hashmap、hashTable、hashset中才会用到的,如果我们现在重写了一个类的equals方法,把一个对象的equals定义为其字段值相等,但是两个值相等的对象返回的hashcode并不相同,那么当你以这个对象为key向hashmap中装填数据时,可能就会发现,有两个逻辑上相等的key并列在这个散列表中,这就是有悖于散列表这种数据结构了。

所以说,如果重新设计了equals方法,还是应该尽量相应的重写hashcode方法,保证equals返回true时,相应的hashcode也是相等的。

毕竟我们的代码是要千秋万代的传承下去的,也许现在没有被某个散列表的数据结构使用所以不会有问题,但是以后一旦有问题就是个无法发现的问题。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值