Dictionary.Keys返回的KeyCollection上的操作有多快? (。净)
IDictionary
定义方法IDictionary.ContainsKey(in TK)
和属性IDictionary.Keys
(在ICollection
类型中)。 我对IDictionary
Dictionary
实现中此方法和属性的(渐近)复杂性感兴趣。
考虑定义
IDictionary dict = new Dictionary(); int k = new Random().Next();
并且考虑到我们已经在字典中添加了唯一的KeyValuePair
。
调用dict.ContainsKey(k)
预期(渐近)复杂度是多少? 我希望它在O(1)
但我没有在Dictionary.ContainsKey
文档中找到它。
调用dict.Keys.Contains(k)
预期(渐近)复杂度是多少? 我希望它在O(1)
但我没有在Dictionary.Keys
文档中找到它,也没有在Dictionary.Keys
文档中找到它。 如果它在O(1)
我不明白为什么IDictionary.Keys
属性的类型是ICollection
而不是ISet
(例如在Java中)。
由于IDictionary
只是一个接口,而不是一个实现,因此它不提供任何性能保证。
对于内置Dictionary
类型, ContainsKey
方法应为O(1):
该方法接近O(1)操作。
Keys.Contains
方法实际上调用了父字典的ContainsKey
方法,因此它也应该是O(1):
该方法是O(1)操作。
(两个引用均来自相关文档页面的“备注”部分。)
您提供的第一个链接在备注中说:
该方法接近O(1)操作。
此外,如果您单击Contains
方法,您会在备注中看到相同的内容:
该方法是O(1)操作。