C#Hashtable内部数据结构

时间:2013-09-12 20:36:08

标签: c# data-structures

全部 -

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

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

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

不寻找碰撞策略等 - 只需计算一个哈希码 - Hashtable在内部用什么数据结构来存储这个值?

任何解释或文章指示都会有所帮助。

2 个答案:

答案 0 :(得分:9)

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

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

添加项目时,哈希码以当前数组大小为模,并确定项目存储的位置。

但是,该插槽不是条目中的插槽,实际上是插槽中的插槽。

散列索引处的存储区中的值是数据实际存储在的条目中的插槽索引,并且只是分配给数组中的下一个空闲插槽。

答案 1 :(得分:3)

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

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