在this示例中,海报已覆盖了获取哈希码方法。我知道这样做是为了为返回的对象提供更好的哈希值,减少冲突次数,从而减少调用Equals()
所需的次数。
我想知道的是,这个算法是如何计算的:
return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode();
是否有特殊原因选择了相关数字?我可以简单地选择自己的数字投入吗?
答案 0 :(得分:4)
一般来说,你应该选择素数。这有助于避免为不同的输入参数获取相同的哈希值。
答案 1 :(得分:2)
素数通常用于哈希码计算,以最大限度地减少冲突。如果您在此iste上搜索哈希码和素数,您会在此找到一些详细说明(请注意它是特定于注释语言的):
答案 2 :(得分:1)
您通常希望使用素数(如上所述),因为它减少了碰撞的可能性(两个实例产生相同的结果)。有关详细信息,请参阅:http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/