2014-02-26 13 views
0

GetHashCode()返回一个int32作为散列。当Dictionary具有多于Int.MaxValue元素时,GetHashCode()行为工作

我想知道如果它的元素数量超过int.MaxValue,它将如何工作,因为它们都会返回一些整数<= int.MaxValue

+0

“int.MaxValue”有什么特别之处?您能否想到一个出现的问题,这个问题也不会出现在少数几个元素上,例如1000? – Jon

+0

对于任何特定类型的对象,'GetHashCode'的合法实现都是'return 0;'。每个对象可以有相同的散列码。这使得尝试使用它的算法效率低下,但宇宙继续工作。 –

回答

0

有没有要求,如果object1.GetHashCode() == object2.GetHashCode(),然后object1.Equals(object2)。任何使用散列码的容器类型都必须准备好处理散列冲突。一种可能的方式是将所有具有相同哈希码的不同对象存储在列表中,并且在查找对象时,首先查找哈希码,然后遍历关联列表中的对象,每次调用Equals直到找到匹配为止。

0

如前所述,GetHashCode不会产生唯一的结果。

字典在每个位置存储一个keyvaluepair,所以当发生冲突时,具有相同哈希码的项目(与底层数组的大小相匹配)被链接在一起,并搜索您要检索的实际关键字。

字典是O(1)在其最好的情况下,甚至是平均情况,但在最坏的情况下,它是O(n)。

相关问题