我正在考虑为给定对象实现我自己的自定义哈希码...并将其用作我的词典的key
。由于(可能)2个对象可能具有相同的哈希码,我应该覆盖哪些额外的运算符,以及覆盖(概念上)应该是什么样的?
myDictionary.Add(myObj.GetHashCode(),myObj);
vs
myDictionary.Add(myObj,myObj);
换句话说,Dictionary是否使用以下组合来确定唯一性以及放置对象的存储桶?
哪个比其他人更重要?
是仅在SortedDictionary中需要compareTo吗?
答案 0 :(得分:2)
GetHashCode用于什么?
设计只对一件事有用:将对象放在哈希表中。因此这个名字。
GetHashCode只能做一件事:平衡哈希表。不要将它用于其他任何事情。特别是:
等等。
Eric Lippert
http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/
答案 1 :(得分:1)
不是导致问题的存储桶 - 一旦您使用哈希码确定存储桶,它实际上是找到正确的对象实例。由于存储桶中的所有对象共享相同的哈希码,因此使用对象相等性(Equals
)来找到正确的哈希码。规则是如果两个对象被认为是相等的,它们应该产生相同的哈希码 - 但是产生相同哈希码的两个对象可能不相等。