当我使用SortedDictionary<>
而不是Dictionary<>
考虑到我需要一个排序的字典时是否会影响性能,所以如果我使用字典,我将不得不手动对其进行排序。哪个会更快?
SortedDictionary<>
或 ( Dictionary<>
+ 手动排序)。
4 回答
插入 aSortedDictionary
是 O(log(n)),所以插入 n 项是 O(n log(n))。相反,插入 aDictionary
是 O(1),因此插入 n 个项目是 O(n),但您需要在使用前对项目进行排序,即 O(n log(n))。基于此,没有太大区别,但Dictionary
有散列的开销,而 SortedDictionary 可能具有更差的内存局部性,因为它可能是作为链接结构实现的。
SortedDictionary 还限制了您可以使用的键类型,因为它需要按键排序,而 Dictionary 则没有,因为它使用散列。
确实,哪个更好取决于您的访问模式,因此最好的办法是针对您的用例衡量两者的性能。
性能受到影响。阅读http://msdn.microsoft.com/en-us/library/f7fta44c.aspx上的备注
基本上,SortedDictionary<T>
是二叉搜索树,Dictionary<T>
而是哈希表。
对于插入、删除和随机查找,Dictionary<T>
会更快。SortedDictionary
如果您按顺序进行不频繁的修改和频繁的列表,将会更快。Dictionary
如果您进行频繁的修改和随机查找,则速度会更快,并且很少需要排序然后输出。
这真的取决于你如何使用字典。
- 您使用的是很多物品还是不是很多物品。
- 与需要排序的时间相比,您添加新项目的频率。
- 你做更多的查找或插入
最好的办法是使用这两种方法对真实数据进行一些性能测试,看看哪种方法更适合您的情况。
这取决于您是将数据添加到字典中而不是获取排序结果,还是一次性完成。
如果您在较长时间内添加数据,每次使用 a 的添加都会对性能造成小幅影响SortedDictionary<>
,但是当您最终想要排序结果时,您会立即得到它。例如,如果您等待用户输入添加项目,这是理想的,因为小的性能影响并不明显。
If you create a dictionary, add data to it, and get the sorted result right away, a Dictionary<T>
would be faster because it uses a faster sorting algorithm (as it can sort it all at once instead of maintaining a sorted result while items are added).