【发布时间】:2011-09-11 06:16:09
【问题描述】:
我有以下代码来生成对象的哈希:
public int GetHashCode(MyType obj)
{
return (obj.Prop1.GetHashCode() + obj.Prop2.GetHashCode() + obj.Prop3.GetHashCode()).GetHashCode();
}
即我添加了所有属性的哈希码,然后对其进行哈希处理。
在审查中,一位同事建议这将过于频繁地发生冲突。我不确定这是不是真的,因为:
- 鉴于哈希码在正数和负数中以相同的频率被选择并且它们环绕,我认为我们没有获得任何关于这些数字总和的可能性而不是数字本身的额外信息
- 如果它们的总和是非随机的,哈希码旨在使“靠近”的数字变得“相距很远”,因此将非均匀分布的值输入函数不应该是问题
谁是正确的?
它在 C# 中,以防答案是特定于语言的。
【问题讨论】:
-
你同事的原因是什么?
标签: c# hash hash-collision hash-code-uniqueness