【发布时间】:2011-09-24 16:56:20
【问题描述】:
我想缓存 10.000 多个键/值对(两个字符串)并开始考虑哪种 .NET(2.0,绑定到 MS Studio 2005 :( ) 结构最好。所有项目将一次性添加,然后将是对特定键的几百次查询。
我已经阅读了the other question 中引用的 MSDN 描述,但我仍然错过了一些关于各种集合的实现/操作复杂性的细节。
例如。在上述问题中,引用 MSDN 的话说,SortedList 是基于树的,而 SortedDictionary “具有相似的对象模型”但复杂度不同。
另一个问题:HashTable 和 Dictionary 是否以相同的方式实现?
对于HashTable,他们write:
如果 Count 小于 Hashtable 的容量,则此方法是 O(1) 操作。如果需要增加容量以容纳新元素,则此方法变为 O(n) 操作,其中 n 为 Count。
但是当容量增加时呢?每个“添加”?然后添加一系列键/值对将是二次复杂度。与 SortedList 相同。
没有提到 OrderedDictionary,这里没有提到实现/复杂性。
也许有人知道一些关于 .NET 集合实现的好文章?
【问题讨论】:
-
我终于有时间查看下面 Joe Cheng 所暗示的源代码 - 再次感谢! - 源代码是最好的文档;)这是我的总结: - 哈希表:当扩大容量(通过因子 2)时,会发生重新散列 - 这需要花费 ca。当前容量,但仅出现 log n 次,因此总体 O(n) -- 字典:内部 Hashtable 对象 -- SortedList:键和值的两个数组,容量放大 2 倍,但无论如何通常插入涉及复制元素 - 所以 0(n^ 2)一共——SortedDictionary:基于一棵树,插入O(log n)