C# 哈希表内部数据结构
本文关键字:数据结构 内部 哈希表 | 更新日期: 2023-09-27 18:31:10
All -
问一个我最近遇到的具体问题,令人惊讶的是没有找到任何令人信服的答案。
C# 哈希表(和字典 - 内部使用哈希表)利用的内部支持数据结构是什么
所以本质上 - 键值对存储在什么样的桶中 - ArrayList,LinkedList(我知道这不是这里的答案),树结构等。
不寻找碰撞策略等 - 只需计算出哈希码 - 哈希表内部使用什么数据结构来存储此值?
任何解释或文章指针都会真正有所帮助。
字典内部数据结构有一个很好的解释:https://www.simple-talk.com/blogs/2011/09/16/the-net-dictionary/,哈希表也是如此
简而言之哈希表由两个数组组成:存储桶和条目
添加项目时,哈希代码是按当前数组大小的模数生成的,这决定了项目存储的槽。
但是,该插槽不是条目中的插槽,它实际上是存储桶中的插槽。
然后,散列索引处的存储桶中的值是实际存储数据的条目中槽的索引,并且只是分配给数组中的下一个可用槽。
System.Collections.Hashtable
定义了一个自定义结构(桶)来存储键、值和冲突信息,并保留了该结构的简单实例数组。
System.Collections.Generic.Dictionary
使用大致相同的策略,尽管使用泛型类型而不是object
。泛型Dictionary
不使用非泛Hashtable
,即使它们的工作方式相似。