image.png
    这里可以看到,
    如果hashcode不等,那么
    如果hashcode相等,equals相等,会认为是同一个对象,直接替换掉原对象。
    如果hashcode相等,equals相等,会认为是同一个对象,直接替换掉原对象。

    在哈希表长度很短的情况下,hashcode不等,并不能保证不两个元素放在两个不同下标上,也就是说也可能通过链表方式进行存储,因为虽然哈希没有冲突但是下标冲突了,从哈希表的角度来看,下标冲突才是真正的hash冲突,而hashcode冲突只不过是下标冲突的一种特殊情况,这里需要复习一下,我们一直以为hashcode冲突就是哈希冲突,其实不是。对于哈希表来讲,hash函数是包括取下标计算在内的,也就是y = f(x ) = distrube(hashcode()) % capacity 这一整个才是哈希函数。也就是如果哈希表容量是4,y1 = 123, y2 = 163,那么他们也是冲突的,会放在链表中,那你会问那这种情况岂不是很常见,为什么hashcode相等这么特殊呢?是因为扩容。
    哈希表扩容不是根据哈希表的下标被占用了多少,而是根据实际哈希表的添加了多少元素,