static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
将 hashCode 值右移 16 位,也就是取 int 类型的一半,刚好将该二进制数对半切开。并且使用位异或运算(如果两个数对应的位置相反,则结果为1,反之为0),这样的话,就能避免我们上面的情况的发生。简而言之就是尽量打乱hashCode的低16位,因为真正参与运算的还是低16位。
博客介绍了将hashCode值右移16位,把二进制数对半切开,再使用位异或运算。其目的是尽量打乱hashCode的低16位,避免特定情况发生,因为真正参与运算的是低16位。
499

被折叠的 条评论
为什么被折叠?



