什么时候应该使用sorteddictionary而不是字典

时间:2011-04-24 18:44:16

标签: c# dictionary benchmarking sorteddictionary

正如我在上一篇文章中写的那样,我对c#世界还很陌生,所以我写了一个小基准来比较Dictionary,Hashtable,SortedList和SortedDictionary。该测试运行8000次迭代,从50到100000个元素。我测试了添加新元素,搜索元素并循环遍历一些元素。结果就像我预期的那样,除了SortedDictionary的结果,这让我感到很困惑......所有结果都很慢。所以我错过了关于排序字典概念的一些内容。我已经问了谷歌,但我发现的所有其他人都得到了相同的测试结果。根据他们的测试实施略有不同。我的问题再一次:为什么SortedDicrionary比其他所有人慢得多?

3 个答案:

答案 0 :(得分:22)

SortedDictionary实现为二叉搜索树。因此,访问元素是O(lg(n))。 Dictionary是一个哈希表,复杂度为O(1),用于访问。

当您需要对数据进行排序(Dictionary没有已定义的顺序)时,SortedDictionary非常有用。字典适用于大多数情况。

答案 1 :(得分:5)

答案很简单,如果您需要一个已排序的字典,您可以使用SortedDictionary

请记住,虽然它最终在测试中最慢,但它仍然不慢。如果您完全需要SortedDictionary所做的,那么这是最好的解决方案。使用DictionarySortedList执行相同操作会非常慢。

答案 2 :(得分:2)

  

我的问题再一次:为什么SortedDicrionary比其他所有人慢得多?

Etienne之前已经提供了技术答案,但是添加了一个更“简单”的评论:我猜想SortedDictionary的“Sorted”位部分会在插入甚至检索项目上产生一些开销,因为它似乎来自Etienne的回答

然而,在真正的应用程序中,如果您在应用程序中需要“已经排序的字典”,则SortedDictionary可能会提供相当大的性能或“感知性能”增加。

希望有所帮助。