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)操作。