有人告诉我,.NET
中的 Hashtable
使用重新哈希(rehashing)来减少/避免冲突。
即,“重新哈希的工作方式如下:假设我们有一组不同的哈希函数 H1…Hn,在向哈希表插入或检索项时,最初使用 H1 哈希函数。如果这导致冲突,则尝试使用 H2,以此类推,直到使用 Hn 避免 Hashtable 中的冲突。”
假设:我们有一个具有 n(其中 n < 无穷大)个元素的哈希表,渐进时间复杂度为 o(1);我们(CLR)在应用某种哈希函数(Hn-1 哈希函数,其中 n>1)时实现了这一点。
问题: 当我们寻找(检索)任何元素(如果使用不同的哈希函数)时,可以有人解释一下 CLR 如何将键映射到哈希码?CLR 如何跟踪(如果有的话)任何活动对象(哈希表)的哈希函数?
提前感谢
Hashtable
是因为要使用 .NET 1.1(直接或通过库)?如果不是,您应该考虑使用System.Collections.Generic.Dictionary<TKey, TValue>
。 - Anthony PegramDictionary<TKey, TValue>
的代码,所以我知道它不使用多个哈希函数,只是使用单个哈希函数object.GetHashCode()
,并根据表大小(这是一个质数)的模放置在插槽中。 - Qwertie