C#哈希表内部数据结构

C#哈希表内部数据结构,c#,data-structures,C#,Data Structures,全部- 问一个我最近遇到的问题,令人惊讶的是没有找到任何令人信服的答案 C#Hashtable(以及内部使用Hashtable的Dictionary)利用的内部支持数据结构是什么 所以本质上-什么样的bucket是存储在-ArrayList、LinkedList(我知道这里不是答案)、树结构中的键值对 不寻找冲突策略等-只要计算一个hashcode-Hashtable内部使用什么数据结构来存储这个值 任何解释或文章指针都会很有帮助 字典内部数据结构有一个很好的解释: ,哈希表也是如此 简而言之

全部-

问一个我最近遇到的问题,令人惊讶的是没有找到任何令人信服的答案

C#Hashtable(以及内部使用Hashtable的Dictionary)利用的内部支持数据结构是什么

所以本质上-什么样的bucket是存储在-ArrayList、LinkedList(我知道这里不是答案)、树结构中的键值对

不寻找冲突策略等-只要计算一个hashcode-Hashtable内部使用什么数据结构来存储这个值


任何解释或文章指针都会很有帮助

字典内部数据结构有一个很好的解释: ,哈希表也是如此

简而言之 哈希表由两个数组组成:bucket和entry

添加项时,哈希代码按当前数组大小生成,这决定了项存储在哪个插槽中

但是,该插槽不是条目中的插槽,而是存储桶中的插槽


散列索引中bucket中的值是数据实际存储在其中的条目中的槽的索引,该槽只分配给数组中的下一个空闲槽。

System.Collections.Hashtable
定义了一个用于存储键的自定义结构(bucket),值和冲突信息,并保留该结构实例的简单数组


System.Collections.Generic.Dictionary
使用大致相同的策略,尽管使用泛型类型而不是
对象
。通用
词典
没有使用非通用
哈希表
,即使它们的工作原理类似。

请看,我相信在这两种情况下,存储桶都只是存储在数组中。不-我只是好奇为什么信息不明确。在这里没有质疑任何人的意图——但觉得这是一件普通/明显的事情,将以书面形式出现。人们可能不同意,但我的看法是。真的很感谢你的回答,虽然我只是仔细检查了一下。它主要是一个简单的桶数组。当您插入足够多的条目使其超过负载因子时,它会使bucket数组的大小加倍,并将所有内容重新灰化到新bucket数组中——通过确保bucket的数量实际上是一个素数来修改加倍。我用RedGates reflector证实了这一点。非常好的文章——多谢了一段有趣的评论——字典(基于泛型)没有使用非泛型哈希表。我认为它在内部使用Hashtable(非通用版本)