C#重写GetHashCode方法

本文关键字:方法 GetHashCode 重写 | 更新日期: 2023-09-27 17:58:07

在本例中,poster覆盖了get hash代码方法。我知道这样做是为了为返回的对象提供更好的哈希值,减少冲突次数,从而减少调用Equals()的必要次数。

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

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

选择这些数字有什么特别的原因吗?我可以简单地选择我自己的数字输入吗?

C#重写GetHashCode方法

通常你应该选择素数。这有助于避免为不同的输入参数获取相同的哈希值。

素数通常用于哈希代码计算,以最大限度地减少冲突。如果你在这个iste上搜索散列码素数,你会发现一些关于它的详细解释(注意,它是特定于注释语言的):

  • 什么是哈希码计算的合理素数
  • 为什么Java的hashCode()在String中使用31作为乘数

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