equals和hashCode到底有什么区别?

1.hashCode相等的两个对象一定相等嘛?相反呢?
  1. 两个hashcode值相同对象不一定相同,hash值不同两个对象一定步相同,碰撞的情况下可能会相同。
  2. 两个对象equals相同,hashCode值一定相同。
2.equals和hashCode的作用?

两者的作用其实都是一样的,在java里都是用来对比两个对象是否相等。

3.equals和hashCode的区别?

equals和hashCode方法主要的区别在于:性能,可靠性;

  • equals方法:因为hashCode并不是完全可靠的,有时候不同的对象生成的hashCode也可能一样(生成hashCode值的公式可能存在问题),所以hashCode并不是完全可靠的,只能通过equals保证两个对象确实相等。
  • hashCode方法:因为重写equals方法比较复杂,调用equals方法比较对象是否相等的效率比较低,而利用hashCode进行对比,只需要生成一个hash值进行比较就可以,效率较高。
  • 实际应用:对于需要大量并且快速对比,如果都用equals比较效率太低,所以每当需要对象比较时,先用hashCode对比,如果hashCode值不一样,两对象肯定不相等,也就没必要再用equals比较,如果hashCode相等,再用equals对比,euqals相同则表示这两个对象确实相同,既提高了执行效率也保证了可靠性。
4.为什么重写equals一定要重写hashCode?

如果重写了equals方法,而没有重写hashCode方法,就会调用Object类中的hashCode方法,那么逻辑上相等的对象,hashCode却不一样,当你用其中的一个对象作为key保存到HashMap,HashSet,HashTable中,再将另一个“相等的”的对象作为key取值,可能会找不到该对象。

5.什么时候需要重写HashCode?

一般情况下判断两个对象是否相等时不需要重写hashCode,只有当类的对象需要作为HashMap,HashSet,HashTable的key时才需要重写hashCode。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值