计算java.util.hash的哈希码值时使用的常量的说明

Pho*_*nix 10 java hash

有人可以解释这些常数的重要性以及选择它们的原因吗?

static int hash(int h) {
        // This function ensures that hashCodes that differ only by
        // constant multiples at each bit position have a bounded
        // number of collisions (approximately 8 at default load factor).
        h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
    }
Run Code Online (Sandbox Code Playgroud)

来源:java-se6库

Cra*_*lus 0

我也对这样的“神奇”数字感到好奇。据我所知,它们神奇的数字。
通过广泛的测试证明,奇数和素数具有可用于散列的有趣优先级(避免主/辅助聚类等)。
我相信大多数数字都是经过研究和测试得出的,这些研究和测试在统计上证明可以提供良好的分布。为什么具体这些数字会这样做,我不知道,但我有这样的印象(希望这里的同事可以纠正我,如果我离题太远),实施者也不知道为什么这些具体数字呈现出这些品质