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

时间:2011-04-15 01:27:13

标签: c# .net collections dictionary complexity-theory

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

考虑定义

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

并考虑我们已添加到字典dict n唯一KeyValuePair s。

电话dict.ContainsKey(k)的预期(渐近)复杂性是什么?我希望它在O(1),但我没有在documentation of Dictionary.ContainsKey中找到它。

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

2 个答案:

答案 0 :(得分:7)

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

对于内置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.

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

答案 1 :(得分:5)

您提供的first link在备注中说:

  

此方法接近O(1)操作。

另外,如果你点击Contains method,你会在备注中看到同样的事情:

  

此方法是O(1)操作。