当我们调用map的put方法的时候,会出现以下三种同下标的情况:

    1. key相同:及key的内存地址相同或equals方法返回为true。这种情况下就是直接覆盖当前key的value。
    2. key的hash值相同:我们都知道hash值相同equals不一定为true,但是equals为true,hash值一定相同。基于这条定理可以识别出和上述的情况并不是同一种场景。再来看,其实这个场景就是我们常说的hash冲突。hash值相同那模出来的下标肯定也相同,然后就采用拉链法解决即可。
    3. hash值不同但是下标相同:这种情况很容易发生,一般比hash冲突发生概览高的多,这种情况下,其处理方式和拉链法是一样的。比如map的threshold=4,那么hash值=1,5,9三个不同值都会模到index=1下面,即扩容到8,那1和9也还都会模到index=1。除非再扩容到16,这三个key才会散列到不同index。也就是说非hash冲突前提下的index冲突是可以通过扩容来降低甚至解决的。所以hashmap的设计中即使是拉链法加入的数据,也会触发size的增加以及扩容。