C#中的Hashtable类型是使用链式法还是开放地址法实现的?

5
如果使用开放地址法,探测序列是如何生成的?请提供链接。

2
哈希表还是字典? - SLaks
3
我会使用链式哈希来下注。有效的开放地址哈希通常需要两个哈希函数,而CLR中的对象只能保证提供一个(GetHashCode())。此外,使用开放地址哈希表进行删除很麻烦。虽然存在相关方案,但链式哈希在实践中并不是那么大的问题(至少根据我几年前运行的基准测试结果是这样)。 - Rafe
2个回答

5
它使用双重散列的开放寻址(或者我们过去所说的“闭合哈希”)来生成探测地址序列。GetHashCode()确定第一个探测索引;间隔也是GHC()的函数。
例如,如果您步入System.Collections.Hashtable.Add()的源代码,就可以看到这一点。[http://referencesource.microsoft.com/]。
愉快的黑客!

2

.Net Framework中的Hashtable使用开放地址法或双重散列技术,而Dictionary则使用链式法作为冲突避免技术。

请参考MSDN上的链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接