面试攻城之hashcode和equals

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

hashCode()方法和equals()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致。

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

1.性能区别

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

2.可靠性

可能大家会有一个疑问,为什么hashCode()效率高,还要用equals()呢?

因为hashCode()并不完全可靠,有时候不同的对象生成的hashcode也会一样,所以说hashCode()方法并不完全可靠,所以可以得出以下两条结论:

(1)equals()方法相等的两个对象,他们由hashCode()生成的对象也一定相等。

(2)hashCode()方法得出hashcode相等的两个对象,采用equals()方法比较不一定相等。

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

1、对于需要大量并且快速的对比的话如果都用equals()去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equals()去再对比了),如果hashCode()相同,此时再对比他们的equals(),如果equals()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

2.在一些hash容器中有时会需要大量且快速的对比一些对象是否相等,比如hashSet要求容器中的对象不重复,那么它就是采用的先进行hashCode()方法比较hashcode值,如果hashcode值相等再进行equals()进行比较,这样对比效率就会提高很多。

3.hashCode()和equals()都是Object中的方法,与equals()方法一样在Object中只是返回当前对象的地址。那么如果在一个类中new了两个一样的对象,那么他们的地址不同,同样所获得的hashcode值也不同。如果我们想要获得唯一的hashcode值,那么就要重写hashcode方法。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值