SortedDictionary<>或(字典<>手动排序)

时间:2013-02-28 21:07:08

标签: c# optimization dictionary sorteddictionary

当我使用SortedDictionary<>而不是Dictionary<>考虑到我需要一个排序的词典时,是否有性能损失,所以如果我使用了词典,我将不得不手动对其进行排序。哪个会更快? SortedDictionary<>或(Dictionary<> +手动排序)。

4 个答案:

答案 0 :(得分:3)

插入SortedDictionary的是O(log(n)),因此插入n个项目是O(n log(n))。相反,插入Dictionary的是O(1),因此插入n个项目是O(n),但是您需要在使用前对项目进行排序,即O(n log(n))。基于此,没有太大的区别,但Dictionary有散列的开销,而SortedDictionary可能有更糟的内存局部性,因为它可能实现为链接结构。

SortedDictionary还限制了您可以使用的键类型,因为它需要按键排序,而Dictionary则不会因为它使用散列而进行排序。

真的,哪个更好取决于您的访问模式,因此最好的办法是根据您的用例来衡量两者的性能。

答案 1 :(得分:1)

性能受到打击。阅读http://msdn.microsoft.com/en-us/library/f7fta44c.aspx

的评论

基本上,SortedDictionary<T>是二叉搜索树,而Dictionary<T>是哈希表。

对于插入,删除和随机查找,Dictionary<T>会更快。如果您按顺序进行不频繁的修改和频繁列表,SortedDictionary会更快。如果您经常进行修改和随机查找,Dictionary会更快,并且很少需要对输出进行排序。

答案 2 :(得分:1)

它真的取决于你如何使用字典。

  • 您使用的是很多物品还是不是很多物品。
  • 与需要排序时相比,添加新项目的频率。
  • 您是否进行了更多查找或插入

最好的办法是使用两种方法对真实数据进行一些性能测试,看看哪种方式更适合您的情况。

答案 3 :(得分:1)

这取决于您是否将数据添加到字典而不是获取排序结果,或者一次完成所有操作。

如果您在较长时间内添加数据,则使用SortedDictionary<>每次添加都会获得较小的性能影响,但是当您最终需要排序后的结果时,您会立即获得它。如果您等待用户输入添加项目,这是理想的,因为小的性能命中率并不明显。

如果你创建一个字典,向它添加数据,并立即得到排序结果,Dictionary<T>会更快,因为它使用更快的排序算法(因为它可以一次排序所有而不是维护添加项目时的排序结果。)