C#重写GetHashCode方法

时间:2011-05-31 10:41:10

标签: c# algorithm hashcode state-machine

this示例中,海报已覆盖了获取哈希码方法。我知道这样做是为了为返回的对象提供更好的哈希值,减少冲突次数,从而减少调用Equals()所需的次数。

我想知道的是,这个算法是如何计算的:

return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode();

是否有特殊原因选择了相关数字?我可以简单地选择自己的数字投入吗?

3 个答案:

答案 0 :(得分:4)

一般来说,你应该选择素数。这有助于避免为不同的输入参数获取相同的哈希值。

答案 1 :(得分:2)

素数通常用于哈希码计算,以最大限度地减少冲突。如果您在此iste上搜索哈希码素数,您会在此找到一些详细说明(请注意它是特定于注释语言的):

答案 2 :(得分:1)

您通常希望使用素数(如上所述),因为它减少了碰撞的可能性(两个实例产生相同的结果)。有关详细信息,请参阅:http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/