C# 哈希表内部数据结构

本文关键字:数据结构 内部 哈希表 | 更新日期: 2023-09-27 18:31:10

All -

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

C# 哈希表(和字典 - 内部使用哈希表)利用的内部支持数据结构是什么

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

不寻找碰撞策略等 - 只需计算出哈希码 - 哈希表内部使用什么数据结构来存储此值?

任何解释或文章指针都会真正有所帮助。

C# 哈希表内部数据结构

字典内部数据结构有一个很好的解释:https://www.simple-talk.com/blogs/2011/09/16/the-net-dictionary/,哈希表也是如此

简而言之哈希表由两个数组组成:存储桶和条目

添加项目时,哈希代码是按当前数组大小的模数生成的,这决定了项目存储的槽。

但是,该插槽不是条目中的插槽,它实际上是存储桶中的插槽。

然后,散列索引处的存储桶中的值是实际存储数据的条目中槽的索引,并且只是分配给数组中的下一个可用槽。

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

System.Collections.Generic.Dictionary使用大致相同的策略,尽管使用泛型类型而不是object。泛型Dictionary不使用非泛Hashtable,即使它们的工作方式相似。