当我使用SortedDictionary<>
而不是Dictionary<>
考虑到我需要一个有序的词典时,性能是否受到影响,所以如果我使用了词典,我将不得不手动排序它。哪个会更快? SortedDictionary<>
或(Dictionary<>
+手动排序)。SortedDictionary <>或(Dictionary <> Manual Sort)
回答
插入到SortedDictionary
是O(log(n)),所以插入n个项目是O(n log(n))。相反,插入到Dictionary
中的是O(1),因此插入n个项目是O(n),但是您需要在使用之前对项目进行排序,即O(n log(n))。基于此,没有太大的区别,但Dictionary
具有散列的开销,而SortedDictionary可能具有更差的内存局部性,因为它可能实现为链接结构。
SortedDictionary还对可以使用的键类型设置限制,因为它需要按键排序,而Dictionary不使用散列。
真的,哪个更好取决于你的访问模式,所以最好的做法是衡量你的用例的性能。
很好的答案。这还取决于他是否正在做大量的查找或删除操作,这两者都是使用'SortedDictionary'的O(log(n))和'Dictionary'的O(1)。 – 2013-02-28 23:06:08
有一个性能问题。阅读http://msdn.microsoft.com/en-us/library/f7fta44c.aspx
基本上,SortedDictionary<T>
是一个二叉搜索树,而Dictionary<T>
是一个哈希表。
对于插入,删除和随机查找,Dictionary<T>
会更快。如果您按顺序进行不经常修改和频繁列表,则SortedDictionary
会更快。如果您经常进行修改和随机查找,那么Dictionary
会更快,并且很少需要对输出进行排序。
这真的要取决于你如何使用字典。
- 你使用了很多物品还是不是很多物品。
- 与您需要排序时相比,您添加新项目的频率如何。
- 你做更多的查找或插入
做的最好的事情就是做真实上下的数据有两种方法一些性能测试,看看哪些适合你的情况更好。
这取决于您是否将数据添加到字典中,与获取排序结果分开,还是一次完成。
如果您在较长时间内添加数据,您将使用SortedDictionary<>
获得每次添加的小性能打击,但是当您最终希望得到排序结果时,您可以立即得到它。例如,如果您等待用户输入添加项目,这是理想的,因为小的性能点击并不明显。
如果您创建一本词典,向其中添加数据并立即获取排序结果,则Dictionary<T>
会更快,因为它使用更快的排序算法(因为它可以一次排序,而不是维护排序结果而物品被添加)。
- 1. list <myClass<int> *> sort
- 2. Sort Map <String,List <Object[]>>
- 3. 如何将Dictionary <String,String>添加到Array <Dictionary <String,String >>?
- 4. 索引检索SortedDictionary <>
- 5. Json反序列化形式Dictionary <string,Dictionary <string,string >>
- 6. Transforming Dictionary <T,U> to Dictionary <T,U.PropertyValue>
- 7. Dictionary <short,Dictionary <EnFunction,bool >> model binding not working
- 8. Dictionary <string,MyObject>或列表<MyObject>与C#3.5?
- 9. SortedList <K,V> vs SortedDictionary <K,V> vs词典<K,V>
- 10. 比较SortedDictionary <字符串列表<foo>> C#
- 11. Enum和Dictionary <Enum,Action>
- 12. C#List <dictionary> To Json
- 13. Hashtable to Dictionary <> syncroot。
- 14. Sort QMap <QString,int>
- 15. <script>或<noscript>?
- 16. 如</p> <p><code><p>This is text </p></code>或<code><div></code>或<code>This is text</code></p> <p>使用<code>XmlPullParser</code>检索URL
- 17. 检查List <Dictionary <string,object >>中是否存在Dictonary <string,object>?
- 18. 如何将Collection <object>转换为ArrayList <Dictionary <string,string>>?
- 19. <Provider /> outside或<Router /> outside>?
- 20. IE事件<input>或<textarea>或<textarea>
- 21. C#将Dictionary <string,AnyType>转换为Dictionary <string,Object>(涉及反射)
- 22. C#JSON反序列化Dictionary <string,Dictionary <string,string >>可选?
- 23. 使用Linq将Dictionary <String,double>转换为Dictionary <String,float>
- 24. BindingList <T> .Sort()表现得像一个列表<T> .Sort()
- 25. 语法<(中<(<'TKEY的,TValue>中)>)> .. ::枚举
- 26. XML使用Dictionary <string,List <string>>对象
- 27. 从列表中获取唯一值<Dictionary <string,string >>
- 28. populate Dictionary <string,List <string>> into android
- 29. Dictionary <obj,List <obj>> into GridView Datasource?
- 30. 如何修改List中的值<Dictionary <string,object >>
你使用什么类型的键和值以及你正在执行什么操作? – mattytommo 2013-02-28 21:10:16
当你使用[Stopwatch](http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx)并测量它时发生了什么? – dtb 2013-02-28 21:10:30
如果您以前从未写过排序,我建议您选择第二个选项,以便您知道第一个选项为什么正确。如果您之前已经编写过排序,请使用第一个选项,直到您遇到可测量的重要性能问题。 – 2013-02-28 21:12:16