任何人都可以给出一个很好的解释和/或链接到一个很好的资源如何哈希代码用于存储和检索哈希表,字典等,特别是在C#/中的对象。净。很好的资源来解释如何在集合中使用哈希代码
我很想看看Equals和GetHashCode在存储和检索项目时如何统一使用。
任何人都可以给出一个很好的解释和/或链接到一个很好的资源如何哈希代码用于存储和检索哈希表,字典等,特别是在C#/中的对象。净。很好的资源来解释如何在集合中使用哈希代码
我很想看看Equals和GetHashCode在存储和检索项目时如何统一使用。
它取决于集合,但是对于字典,散列码用于确定将对象添加到哪个存储桶,并且Equals
用于查找存储桶中的项目以及可能具有相同散列的其他项目。
“A散列码是用于平等测试期间识别对象的数值,它也可以作为一个索引的对象的集合中。 GetHashCode方法是适用于哈希算法和数据结构,如散列表“。
你能举一个例子,其中两个对象将具有相同的哈希码(因此在同一个桶),但不认为与equals平等的吗? 由桶,这真的意味着什么?容器的区域用于将对象分组? – Michael 2010-04-22 22:14:54
@迈克尔:当然。请注意,GetHashCode()实现未指定,理论上可以在.NET版本之间进行更改,但您可以尝试使用这两个字符串:“zqhrehjt”和“ogjhvzfp”。在这两种情况下,我都得到''zqhrehjt“.GetHashCode()==”ogjhvzfp“.GetHashCode()'的值为-1985547583。你说的对象是在容器内分组的。理想情况下,尽管每个组只应包含一个对象。如果对象在同一个桶中结束,则称它为碰撞并可能导致性能下降。如果碰撞太多,桶的数量会增加。 – 2010-04-22 22:22:00
@Michael:还要注意,即使它们具有不同的哈希码,两个项目也可能在同一个桶中结束,因为桶的数量总是少于可能的哈希码的数量。如果桶的数量增加,那么它们可能会以不同的桶结束。 – 2010-04-22 22:26:50