我在互联网上看到了几个关于此事的引用,但没有官方文件。 有人能告诉我在哪里获取相关信息吗?
我在互联网上看到了几个关于此事的引用,但没有官方文献。有人可以告诉我在哪里可以获取这方面的信息吗?我在互联网上看到了几个关于此事的引用,但没有官方文件。 有人能告诉我在哪里获取相关信息吗?
我在互联网上看到了几个关于此事的引用,但没有官方文献。有人可以告诉我在哪里可以获取这方面的信息吗?这不应该被记录,因为这是一项实现细节。
例如,SortedDictionary
有多个实现:有Microsoft的,也有Mono的实现。
事实上,Mono实现的当前版本(2.10.9)确实使用红黑树。 .NET的当前版本也是如此(您可以通过反编译代码找到该信息,例如使用Reflector,ildasm.exe
或MonoDevelop中内置的IL查看器)。
然而,由于存在更有效的实现方式(如B树),这很可能会在未来发生变化。
因此,再次强调:这些信息并没有用处,它们只是实现细节,并且很可能会改变。
MSDN
官方文档的内容:
SortedDictionary泛型类是一种二叉搜索树,具有O(log n)的检索速度,其中n是字典中元素的数量。
好吧,我不太熟悉SortedDictionery是红黑树吗?
红黑树
,但我刚刚使用免费的dotPeek
反编译了SortedDictionary
类,但红黑树的删除算法和SortedDictionary的Remove()方法的代码似乎不相似。所以,我的答案是不是。
SortedDictionary
始终保持其键值排序。它允许您避免自己对键进行排序。它的查找性能比Dictionary
慢。如果您需要在内存中进行排序的查找表,则具有优势。
Dictionary lookup time: Close to O(1)
SortedDictionary lookup time: O(log n)
这里
。SortedDictionary
内部只是使用了 TreeSet
,它是一个内部类,并且确实是基于红黑树实现的。 - Konrad RudolphRemove()
方法,它使用了 internal virtual bool DoRemove(T item)
方法,但似乎没有任何类似于 红黑树
的(这是一种二叉搜索树)删除算法。我错过了什么吗? - Soner GönülSortedDictionary
是一棵二叉搜索树,因此您对DoRemove
方法的评估必须是错误的。话虽如此,MSDN实际上在这一点上非常奇怪,因为正如我在答案中所写的那样,使用二叉搜索树(而不是广义搜索树)是一个实现细节,它肯定会改变,因此这些信息在MSDN中没有任何地方。 - Konrad Rudolph从MSDN页面得知:
SortedDictionary泛型类是一种具有O(log n)检索的二叉搜索树,其中n是字典中元素的数量。