簡體   English   中英

C# 覆蓋 GetHashCode 方法

[英]C# Overriding the GetHashCode method

示例中,發布者已覆蓋獲取 hash 代碼方法。 我知道這樣做是為了為返回的 object 提供更好的 hash 值,以減少碰撞次數,從而減少需要調用Equals()的次數。

我想知道的是,這個算法是如何計算的:

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

選擇相關數字是否有特殊原因? 我可以簡單地選擇我自己的號碼來輸入嗎?

一般來說,你應該選擇素數。 這可以幫助您避免為不同的輸入參數獲得相同的哈希值。

素數通常用於哈希碼計算以最小化沖突。 如果你在這個 iste 上搜索哈希碼和素數,你會找到一些詳細的解釋(注意它是特定於語言的):

您通常希望使用素數(如上所述),因為它減少了沖突的機會(兩個實例產生相同的結果)。 有關詳細信息,請參閱: http://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM