GetHashCode()
返回一个int32
作为散列。当Dictionary具有多于Int.MaxValue元素时,GetHashCode()行为工作
我想知道如果它的元素数量超过int.MaxValue
,它将如何工作,因为它们都会返回一些整数<= int.MaxValue
?
GetHashCode()
返回一个int32
作为散列。当Dictionary具有多于Int.MaxValue元素时,GetHashCode()行为工作
我想知道如果它的元素数量超过int.MaxValue
,它将如何工作,因为它们都会返回一些整数<= int.MaxValue
?
有没有要求,如果object1.GetHashCode() == object2.GetHashCode()
,然后object1.Equals(object2)
。任何使用散列码的容器类型都必须准备好处理散列冲突。一种可能的方式是将所有具有相同哈希码的不同对象存储在列表中,并且在查找对象时,首先查找哈希码,然后遍历关联列表中的对象,每次调用Equals
直到找到匹配为止。
如前所述,GetHashCode不会产生唯一的结果。
字典在每个位置存储一个keyvaluepair,所以当发生冲突时,具有相同哈希码的项目(与底层数组的大小相匹配)被链接在一起,并搜索您要检索的实际关键字。
字典是O(1)在其最好的情况下,甚至是平均情况,但在最坏的情况下,它是O(n)。
“int.MaxValue”有什么特别之处?您能否想到一个出现的问题,这个问题也不会出现在少数几个元素上,例如1000? – Jon
对于任何特定类型的对象,'GetHashCode'的合法实现都是'return 0;'。每个对象可以有相同的散列码。这使得尝试使用它的算法效率低下,但宇宙继续工作。 –