2009-05-25 83 views
1

據我所知,在HashTable中,鍵字符串的哈希值是唯一的,因爲如果有兩個相同的字符串,GetHashCode()函數將用第二個字符串覆蓋第一個字符串。通用字典類鍵值

這將確保有與相同的價值觀不同的琴絃不會產生相同的哈希值。

但是,當涉及到通用字典類,我們可以指定任何類型作爲鍵類型參數。

下去,因爲它不執行字符串行爲由密鑰生成的哈希值不能是唯一的。是這樣嗎?

如果不是,該通用方案背後的過程是什麼?

由於提前,

周杰倫...

回答

3

哈希只是用來把物品放入,以便快速查找的目的,「桶」。散列值不用於確定相等性。

所以不要擔心,如果兩個字符串(或其他)返回完全相同的哈希,他們確實將進入同一個桶,但他們仍然是分開的「鑰匙」。

1

散列值由GetHashCode()方法,每個對象器具,其獲得的。從System.Object繼承的默認實現不保證不同對象的唯一返回值。

但是,哈希值不需要是唯一的對象,因爲它們只用於加快搜索,並且您的密鑰類仍需要等式實現來確定密鑰是否相等。

因此,如果您使用System.Object作爲您的密鑰,它將基於引用的等同性知道另一個密鑰,因爲它將使用Object.Equals來計算出結果。