我正在查看Item[TKey]
Dictionary<TKey,TValue>
来源,试图了解字典中的存储/检索机制,以及为什么它比仅逐个检查每个条目更快。
我感到困惑的地方是buckets
字段中的素数用户以及与Entry<TKey,TValue>.next
的相互作用。
有人可以向我解释逻辑,或指向我能理解的参考资料。
感谢。
答案 0 :(得分:5)
答案 1 :(得分:5)
请看这篇维基百科文章:Hashtable
字典只是散列表的强类型实现。它有许多“桶”,用钥匙放置物品。
当你向哈希表添加一个项目时,它会使用密钥的哈希码来决定它将把它放在哪个桶中(这通常是一个非常快速的操作,只需调用GetHashCode
并对其应用模数)。一旦它有了存储桶(这是某种列表),它会检查存储桶是否已包含具有相同密钥的项目,如果不是这种情况则添加它。这也非常快,因为每个存储桶只包含散列表中所有项目的一小部分。
当您想要根据其密钥检索项目时,它会根据密钥的哈希码确定存储桶,并在存储桶中查找带有此密钥的项目。
当然,这是一个非常简单的描述......有关详细信息,请查看维基百科文章。
答案 2 :(得分:0)