Java

hashCode与equals()

2020-02-26  本文已影响0人  jasperchen

hashCode()介绍

hashCode()的作用是获取哈希码; 实际上是返回一个int整数. 这个哈希码的作用是确定该对象在哈希表中的索引的位置.

hashCode()函数定义在Object.java中, 也就是Java中的任何类都有hashCode()函数.

hashCode()有什么用?
hashCode只在散列表中有用, 在其他情况下没用(例如创建类的单个对象, 或者创建类的对象数组等).

例如hashSet, hashMap, hashTable等

那hashCode和equals有什么关系?
分两种情况

这种情况下, 该类的equals和hashCode没有半毛钱关系.
这种情况下比较该类的两个对象是否相等只需要比较equals, 无需理会hashCode()

这种情况下, equals和hashCode才有关系:

  1. 如果两个对象相等, 那他们的hashCode一定相等.
    此处相等是指eqauls方法返回true
  2. 如果两个对象的hashCode相等, 他们并不一定相等, 需要通过equals方法进一步判断两个对象是否相等.
    这种现象叫做哈希冲突, 即两个不同的键值对, 哈希值相等.
    在这种情况下, 若要判断两个对象是否相等, 除了要覆盖equals外, 还要覆盖hashCode函数, 否则会使equals方法失效, 因为进行equals判断之前会进行hashCode判断.
上一篇 下一篇

猜你喜欢

热点阅读