问题描述
|
在此示例中,发布者已覆盖get hash code方法。我知道这样做是为了为返回的对象提供更好的哈希值,以减少冲突的次数,从而减少需要调用ѭ0的次数。
我想知道的是该算法的计算方式:
return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode();
选择相关数字是否有特定原因?我可以简单地选择自己的数字来输入吗?
解决方法
通常,您应该选择素数。这可以帮助您避免为不同的输入参数获得相同的哈希值。
, 素数通常用于哈希码计算中,以最大程度地减少冲突。如果您在此区域上搜索哈希码和素数,则会发现一些详细的解释(请注意,它是特定于注释语言的):
什么是哈希码计算的明智素数?
为什么Java的String中的hashCode()使用31作为乘数?
, 您通常希望使用质数(如上所述),因为它减少了冲突的机会(两个实例产生相同的结果)。有关更多信息,请参见:http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/