2010-04-22 64 views

回答

1

它取决于集合,但是对于字典,散列码用于确定将对象添加到哪个存储桶,并且Equals用于查找存储桶中的项目以及可能具有相同散列的其他项目。

+0

你能举一个例子,其中两个对象将具有相同的哈希码(因此在同一个桶),但不认为与equals平等的吗? 由桶,这真的意味着什么?容器的区域用于将对象分组? – Michael 2010-04-22 22:14:54

+0

@迈克尔:当然。请注意,GetHashCode()实现未指定,理论上可以在.NET版本之间进行更改,但您可以尝试使用这两个字符串:“zqhrehjt”和“ogjhvzfp”。在这两种情况下,我都得到''zqhrehjt“.GetHashCode()==”ogjhvzfp“.GetHashCode()'的值为-1985547583。你说的对象是在容器内分组的。理想情况下,尽管每个组只应包含一个对象。如果对象在同一个桶中结束,则称它为碰撞并可能导致性能下降。如果碰撞太多,桶的数量会增加。 – 2010-04-22 22:22:00

+0

@Michael:还要注意,即使它们具有不同的哈希码,两个项目也可能在同一个桶中结束,因为桶的数量总是少于可能的哈希码的数量。如果桶的数量增加,那么它们可能会以不同的桶结束。 – 2010-04-22 22:26:50

0

尝试object.GetHashCode

“A散列码是用于平等测试期间识别对象的数值,它也可以作为一个索引的对象的集合中。 GetHashCode方法是适用于哈希算法和数据结构,如散列表“。