System.Collection.Specialized.HybridDictionary的描述是:
使用a实现IDictionary System.Collections.Specialized.ListDictionary 虽然收藏很小,但是 然后切换到 System.Collections.Hashtable时 收集变得很大。
是否存在等效的通用实现?
答案 0 :(得分:3)
不是我知道的。但是,有证据表明需要吗?哈希表没有很大的开销,即使对于非常小的 N ,使用普通哈希表比线性搜索更快。
编辑我没有基准来证明它,只是通过比较算法我得出结论,哈希表应该比线性搜索更快 N &gt ;平均为6(对于字符串键或类似的非平凡哈希),所以实际上没有理由进行混合实现。
论点如下。在线性搜索中,平均需要将一半元素与输入进行比较,即 N / 2.在哈希表中,无论输入大小如何,预计比较的预期数量为2 (对于负载因子小于0.1的非常小的哈希表,这实际上接近1)。另外,必须计算哈希值。这会导致输入上的3个操作,以及可以忽略的非常小的开销。因此,我们搜索哪个 N 确实3> N / 2,其通常是 N > 6。
请注意,上述计算实际上是错误的,因为对于这么少的元素,.NET的Dictionary
的加载因子将远小于0.1。因此,临界点实际上甚至更低。