0
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);
}

有人能告诉我为什么这个哈希方法设计成这样吗?有什么好处?

4

1 回答 1

3

如果您看到Open JDK Source

这个方法有评论...

/**
          * Applies a supplemental hash function to a given hashCode, which
          * defends against poor quality hash functions.  This is critical
          * because HashMap uses power-of-two length hash tables, that
          * otherwise encounter collisions for hashCodes that do not differ
          * in lower bits. Note: Null keys always map to hash 0, thus index 0.
 */
于 2013-07-22T04:56:42.937 回答