HashMap 中散列值的計算

HashMap java 1.8 中的源碼:

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

h >>> 16 代表無符號右移,高位補零。

hashCode() 的高16位不變,低16位與高16位異或作爲 key的最終 hash 值。

這麼做是爲了最後避免最後計算索引值只有低位參與。減少碰撞。

在這裏插入圖片描述

將得到的 hash 與通的大小 n - 1 相與得到 key 所在桶的位置。

這裏 n 是2的整數冪,所以 (n - 1) & hash 相當於 n % hash 運算,這麼做是爲了加快運算速度,這也解釋了爲什麼桶的大小要設置爲2的整數冪。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章