hashMap的扰动处理(2次扰动 = 1次位运算 + 1次异或运算)
哈希值是32位的,hashMap的初始容量是16,取不到hashCode的最大值,为了减少哈希碰撞,让hashCode的高16位和低16位进行或与运算
1次异或运算
哈希值的高16位和低16位进行异或处理
通过hash函数计算出的哈希值h=1111 1111 1111 1111 | 1111 0000 1110 1010
- hashCode低16位
1111 0000 1110 1010
- hashCode高16位
哈希值无符号右移16位,得到高16位
1111 1111 1111 1111
- 高16位和低16位进行或与运算
0000 1111 0001 0101
1次位运算
高16位和低16位或与运算的结果和hashMap容量-1进行位运算(16-1)
0000 1111 0001 0101