hashcode和equals的联系

很多会有疑问,hashcode和equals到底是什么时候关系?接下来我就精简的介绍下

建议:重写equals就养成也重写hashcode的好习惯。

言归正传------------------------------------------

hashcode

使用场景:一般是HashSet, HashTable, HashMap等等这些本质是散列表的数据结构中

作用:例如使用HashSet添加元素的时候(去重复),需要判断两个元素是否相等,如果每次都调用equals的逻辑,则会影响速率。

但是先用hashcode的值来判断的话,明显会更高效一点,不过并不是说hashcode相等,两个的值就相等,因此有了下面的概念:

如果两个对象相等,那么它们的hashCode()值一定相同。这里的相等是指,通过equals()比较两个对象时返回true。

如果两个对象hashCode()相等,它们并不一定相等。因为在散列表中,hashCode()相等,即两个键值对的哈希值相等。然而哈希值相等,并不一定能得出键值对相等,此时就出现所谓的哈希冲突场景。

结论:

在这些散列表中,判断俩个值是否相等的执行逻辑为:

1、先判断hashcode,如果不相等则认为两个值不等(无需进行第二步的比较)

2、当两个值相等之后,会进行equals方法再进行判断,如果相等则认为相等

像其他大部分场景一般hashcode和equals是无关联的,但是集合这类的都是要用的,所以切记:重写equals一定要重写hashcode

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值