C#覆盖GetHashCode方法

问题描述

| 在此示例中,发布者已覆盖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/     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...