【问题标题】:How does a dictionary do a fast lookup [duplicate]字典如何进行快速查找[重复]
【发布时间】:2011-05-26 14:27:01
【问题描述】:

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

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

谁能给我解释一下逻辑,或者指出我可以理解的参考。

谢谢。

【问题讨论】:

标签: c# dictionary


【解决方案1】:

【讨论】:

  • 哇,我不知道。 Hashtables 似乎是无数 CS 专业的博士论文的产物,旨在寻找最有效的方法。
【解决方案2】:

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

字典只是哈希表的强类型实现。它有许多“桶”,用来放置物品及其钥匙。

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

当你想根据key检索一个item时,它会根据key的hashcode确定bucket,并在bucket中查找带有这个key的item。

当然,这是一个非常简单的描述……请查看 Wikipedia 文章了解更多详细信息。

【讨论】:

    【解决方案3】:

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

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

    科林 E.

    【讨论】:

      猜你喜欢
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      相关资源
      最近更新 更多