【发布时间】:2009-09-04 02:35:59
【问题描述】:
这似乎与此 question 重复,它询问“SortedList 和 SortedDictionary 之间有什么区别?”不幸的是,答案只是引用了 MSDN 文档(其中明确指出两者之间存在性能和内存使用差异),但实际上并没有回答问题。
事实上(所以这个问题没有得到相同的答案),根据 MSDN:
SortedList<TKey, TValue>泛型 类是一个二叉搜索树 O(log n) 检索,其中 n 是 字典中的元素数量。 在这方面,它类似于SortedDictionary<TKey, TValue>通用 班级。两个班有相似之处 对象模型,并且都有 O(log n) 恢复。哪两个班 不同之处在于内存使用和速度 插入和移除:
SortedList<TKey, TValue>使用较少 内存大于SortedDictionary<TKey, TValue>。
SortedDictionary<TKey, TValue>有 更快的插入和移除 未排序数据的操作,O(log n) 与 O(n) 相反SortedList<TKey, TValue>。如果列表被一次性填充 从排序数据来看,
SortedList<TKey, TValue>比SortedDictionary<TKey, TValue>。
因此,显然这表明SortedList<TKey, TValue> 是更好的选择除非您需要对未排序数据进行更快的插入和删除操作。
问题仍然存在,鉴于以上信息,使用SortedDictionary<TKey, TValue> 的实际(现实世界、商业案例等)原因是什么?根据性能信息,这意味着根本不需要SortedDictionary<TKey, TValue>。
【问题讨论】:
-
请注意,您引用的部分几乎说明了一切。但是请注意,您关于“更快地插入和删除未排序数据的操作”的说法并不完全正确。它实际上是在说“插入和删除”操作在 SortedList 上总是具有更高的时间复杂度。关于“未排序数据”的陈述仅涉及通过它们的构造函数用数据初始化这些结构。
-
这似乎与 .NET 2.0 相关。 SortedList
的实现似乎从 3.0 开始发生了变化。我最近需要自己回答这个问题,发现这个问题及其回答可能不再与 .NET 4.5 的用户相关。
标签: c# .net sortedlist sorteddictionary