c# - Dictionary.Keys 返回的 KeyCollection 的操作速度有多快? (。网)

标签 c# .net collections dictionary complexity-theory

IDictionary<TK, TV> 定义方法 IDictionary.ContainsKey(in TK) 和属性(property) IDictionary.Keys (类型 ICollection )。 我对 Dictionary 中此方法和属性的(渐近)复杂性感兴趣实现 IDictionary<TK, TV> .

考虑定义

IDictionary<int, string> dict = new Dictionary<int, string>();
int k = new Random().Next();

并考虑我们已经添加到字典dict n独一无二 KeyValuePair

调用的预期(渐近)复杂度是多少 dict.ContainsKey(k) ?我希望它在 O(1)但我没有在 documentation of Dictionary.ContainsKey 中找到它.

调用的预期(渐近)复杂度是多少 dict.Keys.Contains(k) ?我希望它在 O(1)但我没有在 documentation of Dictionary.Keys 中找到它也不在documentation of Dictionary.KeyCollection .如果在O(1)我不明白为什么要输入 IDictionary.Keys属性是 ICollection而不是 ISet (例如在 Java 中)。

最佳答案

IDictionary<K,V>只是一个接口(interface),不是一个实现,那么它不提供任何性能保证。

对于内置 Dictionary<K,V>类型, ContainsKey 方法应该是 O(1):

This method approaches an O(1) operation.

Keys.Contains 方法实际上调用父字典的 ContainsKey方法,所以这也应该是 O(1):

This method is an O(1) operation.

(两条引文均摘自相关文档页面的“备注”部分。)

关于c# - Dictionary.Keys 返回的 KeyCollection 的操作速度有多快? (。网),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5671512/

相关文章:

c# - SVCUTIL.EXE:有什么方法可以分离我的 Commons.xsd 类? (C#)

c# - 尝试从 .NET 字典中提取键列表

c# - Mode=TwoWay、UpdateSourceTrigger=PropertyChanged 或 LostFocus?

.net - Visual Studio 不断向我的 csproj 添加属性。为什么?

.net - 访问被拒绝在 Windows 7 上运行 sn.exe

c# - 如何使用 NServiceBus 避免 READPAST 锁定警告

c# - 如何编写桌面监控软件代码?

java - 如何遍历 TreeMap?

java - 在 Java 中使用迭代器从循环中的集合中获取当前元素和下一个元素

java8从对象基本条件列表中删除对象