我正在通过 Java 的 HashMap hash() 实现,如下所示
final int hash(Object k) {
// some checks
h ^= k.hashCode();
// 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);
// >>> is Unsigned right shift
}
我不确定为什么要添加下面的代码,以及这样做有什么好处?
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
或者,如果我从实现中删除上述代码,让我重新提出我的问题,有什么缺点?我了解它如何避免碰撞的机会,但不确定“确切”如何?
有人可以通过举个例子来帮助我理解,并解释它在使用和不使用上述代码的情况下如何工作?