Java:为什么要重写hashCode()和equals()方法

为什么要重写hashCode()和equals()方法

一、hashCode()和equals()是什么

hashCode()方法和equals()方法的作用是其实一样的,都是用来对比两个对象是否相同

二、hashCode()和equals()的区别

从下面两个角度来看待:

1.equals()既然已经实现了对比的功能,为什么还要hashCode()呢?

因为重写的equals()里面一般比较的比较全面,比较复杂,这样效率就比较低了,而利用hashCode()进行对比,则只生成一个hash值进行比较就可以了,效率很高

2.hashCode()效率这么高为什么要重写equals()呢?

因为hashCode()并不是完全可靠,有时候互通的对象生成的hashCode也会一样,所以并不是完全可靠,所以要重写equals()方法

记住两句话

  • equals()相等的两个对象,他们的hashCode()肯定相等。
  • hashCode()相等的两个对象,equals()不一定相等。

三、hashCode()和equals()使用的注意事项

  • 只要重写了equals()方法就必须重写hashCode()方法
  • 因为Set存储的是不重复的对象,依据hashCode()和equals()方法来进行判断,所以Set存储的对象必须重写这两个方法。
  • 如果Map集合存储的是自定义的key作为键的话,就必须重写这两个方法。
  • String类已经重写了这两个方法,所以我们可以直接使用,不需要重写。
  • 只要当类需要存放HashTable、HashMap、HashSet等等,hash结构的集合时,就需要重写hashCode().
什么情况下hashCode是相等的?
  1. 如果 key 相等,hashCode 必须相等

  2. 如果 key1 和 key2 冲突了,hashCode 也相等(不是要求,只是冲突了)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值