HashMap 首先根据key计算hash值,(hashcode右移16位与hashcode异或计算)用hash值不用hashcode值是因为hashcode 32位 太大不方便计算,并且得到答案的概率不均衡。
第二步 是根据hash值去计算数组下标 ((n-1)&hash),用这个不用hash值取余计算因为二进制更快,符合计算机原理, 效果和hash值取余是一样的。
下面是具体操作
其中node 节点包含 hash值 ,key ,value 。还有next(链表的属性)
当计算出来的下标相同时,就是Hash冲突。
第一种情况,hash值相同时并且key相同,其实就是覆盖了
第二种情况,hash值相同,key不同,就在同一个数组下的next节点插入。