Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义GetHashcode实现是否会导致字典或哈希表出现问题;s";“桶”;_C#_Dictionary_Gethashcode_Compareto_Sorteddictionary - Fatal编程技术网

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);