9
可能重复:
What is the best algorithm for an overridden System.Object.GetHashCode?实施的GetHashCode
什么构成了良好的执行GetHashCode方法的?我做了一些Google搜索,并找到了一些goodlines(MSDN),但似乎逻辑只是操纵两个数字作为字段存储在类中。这种方法的实际逻辑很简单吗?
可能重复:
What is the best algorithm for an overridden System.Object.GetHashCode?实施的GetHashCode
什么构成了良好的执行GetHashCode方法的?我做了一些Google搜索,并找到了一些goodlines(MSDN),但似乎逻辑只是操纵两个数字作为字段存储在类中。这种方法的实际逻辑很简单吗?
最低要求是对于任何给定的值,散列码应该是相同的。所以,这个实现的作品,但分布是可怕的:
public override int GetHashCode() {
return 1;
}
最好的工作,哈希码应该考虑对象中的所有相关数据,并可以为均匀分布尽可能整数范围内。
可以在System.Drawing.Point结构中找到确实考虑所有成员,但没有提供非常好的分布的实现。它使用XOR到位成员结合,这意味着其中X和Y是相等的所有点得到的哈希码为零:
public override int GetHashCode() {
return this.X^this.Y;
}
的一种方式,以获得更好分布由原乘一员号并添加的下一个成员,根据需要重复:
public override int GetHashCode() {
return ((this.Value1 * 251) + this.Value2) * 251 + this.Value3;
}
同样的方法在简单的随机发生器被使用,因为它散射值相当不错。
那里有一些非常好的点。谢谢! – dotnetdev 2010-05-23 20:00:57