Bootstrap

hashmap 的 hash()方法详解:(h = key.hashCode()) ^ (h >>> 16)

看下该方法:

static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

返回的是(h = key.hashCode()) ^ (h >>> 16)的值,也就是hashcode和无符号右移16位的hashcode后得到的值做异或运算

h = key.hashCode()的时候已经把hashcode的值赋值给h了

我就拿当key等于String类型时举例

String de hashcode改写过了,因此和object的不同。

看代码:

String test = "my name is suser";
int hashcode = test.hashCode(); // 十进制值为284986057

转换成二进制为:

10000111111001000101011001001

总位数为29位,不方便测试高低16位,我们在前加0变为32位:

00010000111111001000101011001001

然后看下h >>> 16

;