如您所知,在向集合中添加新对时Dictionary,首先计算密钥的哈希值。然后对该 hash 执行按位运算& 0x7FFFFFFF,如集合的源代码中所示。
我有一个问题,如果我对所有内容都理解正确,那么只有在哈希结果为负数的情况下才需要此操作,因为我们int也可以存储负值。而这个操作的结果是另一个数字,它总是正数。
如果是这种情况,那么代替:
int hashCode = comparer.GetHashCode(key) & 0x7FFFFFFF;
int targetBucket = hashCode % buckets.Length;
你可以使用这样的代码:
int hashCode = comparer.GetHashCode(key);
if (hashCode < 0)
{
hashCode = hashCode * -1;
}
int targetBucket = hashCode % buckets.Length;
正确的?










