最近我在一些關於散列表的訪談中鑽了一下,什麼時候需要重寫GetHashCode()。討論不斷深入,直到我投入毛巾。有關散列表和字典的面試問題
我現在正在做一些研究,以涵蓋下一次準備的一切。
我發現這一點,我想優秀文章分享到: http://msdn.microsoft.com/en-us/library/ms379571(VS.80).aspx#datastructures20_2_topic5
1)的東西,我不覺得很舒服是字典基於哈希的事實,但列表是顯然不是。這僅僅意味着在列表<>和數組[]中搜索是線性的,而在字典或散列表中搜索是恆定的,因此速度更快?這是全部嗎?
2)如果我在字典中使用類作爲鍵,我需要根據任何必需的標識字段來覆蓋該類的GetHashcode()以使這些實例具有唯一性。但是它仍然可能發生這兩個ID字段是相等的,並且會生成相同的哈希碼?如果是這種情況,那麼在兩個實例發生碰撞時會發生什麼?
3)如何解決碰撞?我在文章中閱讀了關於哈希表和Chaining詞典碰撞情況下重新哈希方法的文章。但我仍然不確定它是如何工作的,因爲我不是數學天才。 : - \有沒有人可以更好地解釋它是如何工作的?
非常感謝, 卡瓦
如果生成相同的哈希碼,則在該對象上運行equals函數以確定是否相等。因此,不要忘記也要重寫該函數。 – Magnus 2011-02-07 15:28:59
我只是想感謝所有貢獻的人。我接受了一次採訪,他們要求HashSet哈哈。在我們討論的過程中,我一次性給了他所有的哈希/反對,並給他留下了深刻的印象。通過了面試。所以它一定是對的。 ;) – Houman 2011-02-17 11:04:17