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
posted @ 2019-10-31 22:07  HanYu-chn  阅读(116)  评论(0)    收藏  举报