C# 词典如何快速查找
我正在查看C# 词典如何快速查找,c#,dictionary,C#,Dictionary,我正在查看字典的项[TKey]源代码,试图了解字典中的存储/检索机制,以及为什么它比逐个检查每个条目更快 我感到困惑的是bucket字段中素数的用户以及与条目的相互作用 有人能给我解释一下逻辑吗,或者指出一个我能理解的参考资料 谢谢。查看哈希代码,它们允许字典“存储”键: 科林·E.请看这篇维基百科文章: 字典只是哈希表的强类型实现。它有许多“桶”,用来存放带有钥匙的物品 当您向哈希表中添加一个项时,它使用键的hashcode来决定将其放入哪个bucket(这通常是一个非常快速的操作,只需调用
字典的项[TKey]
源代码
,试图了解字典中的存储/检索机制,以及为什么它比逐个检查每个条目更快
我感到困惑的是bucket
字段中素数的用户以及与条目的相互作用
有人能给我解释一下逻辑吗,或者指出一个我能理解的参考资料
谢谢。查看哈希代码,它们允许字典“存储”键:
科林·E.请看这篇维基百科文章:
字典只是哈希表的强类型实现。它有许多“桶”,用来存放带有钥匙的物品
当您向哈希表中添加一个项时,它使用键的hashcode来决定将其放入哪个bucket(这通常是一个非常快速的操作,只需调用GetHashCode
并对其应用一个模)。一旦它有了bucket(这是一种列表),它就会检查bucket是否已经包含了一个具有相同密钥的项,如果不是这样,就会添加它。这也是非常快的,因为每个bucket只包含哈希表中所有项的一小部分
当您希望根据项的键检索项时,它会根据项的哈希代码确定bucket,并在bucket中查找具有此键的项
当然,这是一个非常简单的描述。。。查看Wikipedia文章了解更多详细信息。哈希表+单独链接暂时忽略“素数”部分(这是一些基于数论的优化),然后查看/hash table/Wikipedia页面中的图表。哇,我不知道。哈希表似乎是无数计算机科学专业的博士论文的产物,目的是找到最有效的方法。