2010-04-22 19 views

回答

1

它取決於集合,但是對於字典,散列碼用於確定將對象添加到哪個存儲桶,並且Equals用於查找存儲桶中的項目以及可能具有相同散列的其他項目。

+0

你能舉一個例子,其中兩個對象將具有相同的哈希碼(因此在同一個桶),但不認爲與equals平等的嗎? 由桶,這真的意味着什麼?容器的區域用於將對象分組? – Michael 2010-04-22 22:14:54

+0

@邁克爾:當然。請注意,GetHashCode()實現未指定,理論上可以在.NET版本之間進行更改,但您可以嘗試使用這兩個字符串:「zqhrehjt」和「ogjhvzfp」。在這兩種情況下,我都得到''zqhrehjt「.GetHashCode()==」ogjhvzfp「.GetHashCode()'的值爲-1985547583。你說的對象是在容器內分組的。理想情況下,儘管每個組只應包含一個對象。如果對象在同一個桶中結束,則稱它爲碰撞並可能導致性能下降。如果碰撞太多,桶的數量會增加。 – 2010-04-22 22:22:00

+0

@Michael:還要注意,即使它們具有不同的哈希碼,兩個項目也可能在同一個桶中結束,因爲桶的數量總是少於可能的哈希碼的數量。如果桶的數量增加,那麼它們可能會以不同的桶結束。 – 2010-04-22 22:26:50

0

嘗試object.GetHashCode

「A散列碼是用於平等測試期間識別對象的數值,它也可以作爲一個索引的對象的集合中。 GetHashCode方法是適用於哈希算法和數據結構,如散列表「。