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