return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
网上说是让这个 key 可以更加分散?
让原本的 hashcode 和 原本 hashcode 无符号右移 16 位 进行一次异或
1
kerb15 2020-11-03 14:48:03 +08:00 1
扰动函数,将高位和地位做异或,主要是为了让所有二进制位都能进来参与运算,增加随机性,使得散列的效果更好
|
2
SoloCompany 2020-11-03 14:55:56 +08:00 1
因为桶的数量通常不会超过 65536, 异或一下减少高位信息熵的浪费
|
3
AllanAG 2020-11-03 15:08:42 +08:00 1
在这个方法中将 key 的 hashcode 右移 16 位,然后按位异或。异或算法是相同为 0,不同为 1 。
右移 16 位以后,原来的高 16 位就到了低 16 位上,再与原来的数异或,就相当于高 16 位与低 16 位异或。 因此 hash 算法的作用就是高 16 位不变,低 16 位和高 16 位做异或。 |