hashCode与equals()

hashCode()介绍

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

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

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

例如hashSet, hashMap, hashTable等

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

  • 不会创建类对应的散列表
    也就是不会在HashSet, Hashtable, HashMap等这些本质是散列表的数据结构中用到该类.

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

  • 会创建类对应的散列表
    也就是会在HashSet, Hashtable, HashMap等这些本质上是散列表的数据结构中用到该类.

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

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

你可能感兴趣的:(hashCode与equals())