很多会有疑问,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