Hashtable就是那么快

时间:2010-04-02 06:15:22

标签: c# .net asp.net performance collections

s [0] * 31 ^(n-1)+ s [1] * 31 ^(n-2)+ ... + s [n-1]。是java字符串的哈希函数,我假设其余语言与此实现类似或接近。

如果我们有hash-Table和50个元素的列表。每个元素是7个字符ABCDEF1,ABCDEF2,ABCDEF3 ..... ABCDEFn

如果每个哈希表桶都包含5个字符串(我认为这个函数会使每个桶有一个字符串,但我们假设它是5个字符串。)

如果我们调用col.Contains(“ABCDEFn”); //将进行6次比较并发现7日的差异。

哈希表将进行大约70次操作(乘法和加法)以获取哈希码并与桶中的5个字符串进行比较。而它发现了。

对于列表,需要大约300次比较才能找到它。

对于只有10个元素的情况,该列表将需要大约70个操作,但Hashtable将需要大约50个操作。并注意哈希表操作更耗时(它是乘法)。

我得出结论,.Net中的HybirdDictionary可能是大多数需要Hashtable大小未知的情况的最佳选择,因为它会让我使用一个列表,直到列表变成超过10个元素。仍然需要像HashSet而不是键和值的词典,我想知道为什么没有HybirdSet !!

那你觉得怎么样?

由于

2 个答案:

答案 0 :(得分:3)

这真的很重要吗?您通常关心大量数据集对性能的影响。如果收集量很小,则可以进行20-30次额外操作。

答案 1 :(得分:1)

我认为你提出了一个好点。对于小数字,列表可能比哈希表更快,这在文献中已有详细记载。

但是,您可以轻松创建自己的数据结构,根据其大小count()将使用列表或哈希。