字典如何进行快速查找

时间:2010-12-16 14:38:31

标签: c# dictionary

我正在查看Item[TKey] Dictionary<TKey,TValue>来源,试图了解字典中的存储/检索机制,以及为什么它比仅逐个检查每个条目更快。

我感到困惑的地方是buckets字段中的素数用户以及与Entry<TKey,TValue>.next的相互作用。

有人可以向我解释逻辑,或指向我能理解的参考资料。

感谢。

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:5)

请看这篇维基百科文章:Hashtable

字典只是散列表的强类型实现。它有许多“桶”,用钥匙放置物品。

当你向哈希表添加一个项目时,它会使用密钥的哈希码来决定它将把它放在哪个桶中(这通常是一个非常快速的操作,只需调用GetHashCode并对其应用模数)。一旦它有了存储桶(这是某种列表),它会检查存储桶是否已包含具有相同密钥的项目,如果不是这种情况则添加它。这也非常快,因为每个存储桶只包含散列表中所有项目的一小部分。

当您想要根据其密钥检索项目时,它会根据密钥的哈希码确定存储桶,并在存储桶中查找带有此密钥的项目。

当然,这是一个非常简单的描述......有关详细信息,请查看维基百科文章。

答案 2 :(得分:0)

查看哈希码,它们允许字典“桶”键:

http://msdn.microsoft.com/en-us/library/4yh14awz%28VS.80%29.aspx

Colin E。