Dictionary.Keys 返回的 KeyCollection 操作有多快? (。网)

发布于 2024-11-01 10:17:15 字数 1578 浏览 3 评论 0原文

IDictionary定义方法IDictionary.ContainsKey(TK 中) 和属性 IDictionary.Keys(类型为 ICollection)。 我对此方法和属性的(渐近)复杂性感兴趣 Dictionary IDictionary

考虑定义

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

并考虑我们已向字典中添加了 dict n 个唯一的 KeyValuePair

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

调用 dict.Keys.Contains(k) 的预期(渐近)复杂度是多少?我希望它在 O(1) 中,但我没有在 Dictionary.Keys 的文档,也不在 Dictionary.KeyCollection 的文档。如果它在 O(1) 中,我不明白为什么 IDictionary.Keys 属性的类型是 ICollection 而不是 ISet< /code> (例如 Java 中的代码)。

IDictionary<TK, TV> defines method IDictionary.ContainsKey(in TK) and property IDictionary.Keys (of type ICollection).
I'm interested in (asymptotic) complexity of this method and property in Dictionary implementation of IDictionary<TK, TV>.

Consider definitions

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

and consider that we have added to the dictionary dict n unique KeyValuePairs.

What is expected (asymptotic) complexity of a call dict.ContainsKey(k)? I hope it's in O(1) but I did not find it in documentation of Dictionary.ContainsKey.

What is expected (asymptotic) complexity of call dict.Keys.Contains(k)? I hope it's in O(1)but I did not find it in documentation of Dictionary.Keys nor in documentation of Dictionary.KeyCollection. If it is in O(1) I don't understand why type of IDictionary.Keys property is ICollection and not ISet (like in Java for example).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷默言语 2024-11-08 10:17:15

由于 IDictionary 只是一个接口,而不是一个实现,因此它不提供任何性能保证。

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

此方法接近 O(1) 运算。

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

此方法是一个 O(1) 操作。

(两者引用取自相关文档页面的“备注”部分。)

Since IDictionary<K,V> is only an interface, not an implementation, then it doesn't provide any performance guarantees.

For the built-in Dictionary<K,V> type, the ContainsKey method should be O(1):

This method approaches an O(1) operation.

The Keys.Contains method actually calls the parent dictionary's ContainsKey method, so that should also be O(1):

This method is an O(1) operation.

(Both quotes are taken from the "Remarks" section of the relevant documentation pages.)

感性 2024-11-08 10:17:15

您提供的第一个链接在备注中说道:

此方法的运算时间复杂度为 O(1)。

另外,如果您单击包含方法 你会在注释中看到同样的事情:

此方法的操作时间复杂度为 O(1)。

The first link you provided says, in the Remarks:

This method approaches an O(1) operation.

Also, if you click on the Contains method you'll see the same thing in the remarks:

This method is an O(1) operation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文