当equals方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规约定:值相同的对象必须有相同的hashCode。
HashMap
是由数组和链表组成的高效存储数据的结构。那么是如何确定一个数据存储在数组中的哪个位置呢?就是通过 hashCode
方法进行计算出存储在哪个位置,还记得我们上面讲 hashCode
方法说了有可能两个不同对象的 hashCode
方法返回的值相同,那么此时就会产生冲突,产生冲突的话就会调用 equals
方法进行比对,如果不同,那么就将其加入链表尾部,如果相同就替换原数据。