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