HashMap源码解析之hash
static final int hash(Object key) {
int h;
//key的hashcode的高16位与低16位进行异或运算
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
之所以要进行再hash,是因为在算数组索引时,当数组长度较少,参与与运算的位数在低位并且较少,这样相同的hashcode值算出相同index的概率较大.所以通过再hash,让更多位数间接参与index计算.
index = (tab.length - 1) & hash
浙公网安备 33010602011771号