C# 字典如何从大量数据中搜索特定的键值?

C# 字典如何从大量数据中搜索特定的键值?,c#,dictionary,C#,Dictionary,关于C hsarp字典,我有一个非常具体的问题。 假设字典中有100000个数据 var dictionary = new Dictionary<string, int>(); 现在假设您正在字典中搜索一个特定的字符串 if (dictionary.ContainsKey("apple")) { // then do this } 我的问题是,字典如何从这些键中搜索这个特殊值? 它正在进行线性搜索。但是msdn声称字典搜索的复杂性接近O(1) 我对字典的了解是它

关于C hsarp字典,我有一个非常具体的问题。 假设字典中有100000个数据

var dictionary = new Dictionary<string, int>();
现在假设您正在字典中搜索一个特定的字符串

if (dictionary.ContainsKey("apple"))
  {
     // then do this
  }
我的问题是,字典如何从这些键中搜索这个特殊值? 它正在进行线性搜索。但是msdn声称字典搜索的复杂性接近O(1)

我对字典的了解是它没有任何内部搜索/排序算法。

有谁能解释一下字典是如何将其值存储在内存中的,以及从系统的角度如何检索这些值的。我知道,作为一名高级程序员,我们不需要考虑.Net的所有这些功能,但知道这些很好。其实我很想知道。MSDN说它使用哈希表,但没有解释。

从您的问题中可以看到:

使用键检索值非常快,接近O(1), 因为Dictionary类是作为散列实现的 表

我相信你需要阅读有关哈希表的内容


可能一个很好的起点是:

链接是关于hashTable wiki的,但我的问题是字典如何使用hashTable,以便搜索特定字符串得到O(1)。字典是如何快速搜索特定字符串的?需要注意的是,“搜索”列表并不一定意味着任何类型的“排序”。即使使用哈希表,O(1)也有点乐观。它应该是O(logn),不是吗?@JohnB不,一个好的哈希表实现的平均值几乎是O(1)。“几乎”来自额外的成本,包括:(1)从给定密钥获取哈希值,(2)在映射到相同哈希值的密钥组中搜索精确的密钥。如果实现得好,这两个代价都可以忽略。唯一的答案是使用哈希表、字典搜索特定的数字或字符串并将结果抛出给用户。这么快吗?@Debhere,你可以看到关于哈希表的文章,链接在answer@Debhere:哈希表是一种数据结构,专门设计用于提供非常快速的值查找,接近O(1)。是的,这太快了:-)@Habib:这是一个问答网站。与其反复链接到其他内容,不如试着对你链接到的内容给出一个有用的概述,以便提问者了解你在说什么。你链接到的页面很长,很复杂,而且不明显:这个网站的存在(部分)是为了平衡这种情况。@Habib是的,我正在浏览那篇文章。谢谢分享这篇文章。
if (dictionary.ContainsKey("apple"))
  {
     // then do this
  }