C# 自定义GetHashcode实现是否会导致字典或哈希表出现问题;s";“桶”;
我正在考虑为给定对象实现自己的自定义哈希代码。。。并将其用作我的字典的C# 自定义GetHashcode实现是否会导致字典或哈希表出现问题;s";“桶”;,c#,dictionary,gethashcode,compareto,sorteddictionary,C#,Dictionary,Gethashcode,Compareto,Sorteddictionary,我正在考虑为给定对象实现自己的自定义哈希代码。。。并将其用作我的字典的键。由于有可能(很可能)两个对象将具有相同的哈希代码,我应该覆盖哪些额外的运算符,以及该覆盖(概念上)应该是什么样子 myDictionary.Add(myObj.GetHashCode(),myObj); vs 换句话说,字典是否结合使用以下各项来确定唯一性以及将对象放在哪个bucket中 哪一个比其他的更重要 哈希码 相等于 == 比较 compareTo是否仅在SortedDictionary中才需要?导致问
键。由于有可能(很可能)两个对象将具有相同的哈希代码,我应该覆盖哪些额外的运算符,以及该覆盖(概念上)应该是什么样子
myDictionary.Add(myObj.GetHashCode(),myObj);
vs
换句话说,字典是否结合使用以下各项来确定唯一性以及将对象放在哪个bucket中
哪一个比其他的更重要
- 哈希码
- 相等于
- ==
- 比较
compareTo是否仅在SortedDictionary中才需要?导致问题的不是bucket,而是在使用哈希代码确定bucket后,找到正确的对象实例。由于bucket中的所有对象共享相同的哈希代码,因此使用对象相等(等于
)来查找正确的对象。规则是,如果两个对象被认为是相等的,那么它们应该生成相同的哈希代码——但是生成相同哈希代码的两个对象可能不相等。GetHashCode用于什么
从设计上看,它只对一件事有用:将对象放入哈希表。因此得名
GetHashCode的设计目的只有一件事:平衡哈希表。不要将其用于其他任何用途。特别是:
- 它不为对象提供唯一的密钥;发生碰撞的概率极高李>
- 它不具有加密强度,因此不要将其用作数字签名的一部分或等效密码
- 它不一定具有校验和所需的错误检测属性
等等
埃里克·利珀特
myDictionary.Add(myObj,myObj);