hashcode和equals的关系

Z, ZLW 336

hashcode和equals的关系只有在散列表(哈希表)中才能体现,二者在散列表中相辅相成,发挥作用。在散列表中,需要基于 hashCode 算出元素要插入的数组下标,如果该下标下已经有值,那么说明发生了哈希冲突,这时需要再调用 equals 进行进一步的对比。

二者关系

一般情况下,两个方法没有任何关系。如果我们只需要对比两个对象内容是否相同,调用 equals 即可,hashCode 和 equals 只有在散列表(哈希表)中才能相辅相成,发挥作用。

在散列表中,我们需要基于 hashCode 算出元素要插入的数组下标,如果该下标下已经有值,那么说明发生了哈希冲突,这时我们再调用 equals 进行进一步的对比,并遵循如下规定:

  1. 当 hashCode 不同时,两个对象肯定不同;
  2. 当 hashCode 相同时,需进一步调用 equals 对比;
  3. 当 equals 返回 true 时,两个对象 hashCode 一定相同。

所以当我们需要将某一个类的对象存入散列表时(如 HashMap、HashTable 等),hashCode 和 equals 都必须重写。

拓展阅读

hashcode

hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。

equals

equals它的作用也是判断两个对象是否相等,如果对象重写了equals()方法,比较两个对象的内容是否相等;如果没有重写,比较两个对象的地址是否相同,价于“==”。同样的,equals()定义在JDK的Object.java中,这就意味着Java中的任何类都包含有equals()函数。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部