Dictionary字典
a)简述Dictionary底层实现
b)现在有一个Dictionary b,已知它的容量是4,此时,再往里添加第5个元素,这时Dictionary底层会发生哪些具体行为
a:
Dictionary字典与List一样都是以数组作为底层存储结构。首先引入Entry的结构体,它是最新小的存储单位,接着定义几个关键的私有变量。
字典存储的实现有两个关键的算法,Hash算法和解决Hash碰撞冲突的算法。一个Key通过Hash函数运算后可得到hashCode,通过hashCode的映射可直接得到此键值对应存储的value。因为hashCode一般取值很大,不可能每个hashCode都指定一个映射。
这里引进一个hash桶的概念,将生成的hashCode以分段的形式来映射,每一段称之为桶,一般常见的桶是直接对结果取余。但是这种方式会加剧hash的冲突。
常见的解决冲突的方式有拉链法与再哈希法。
b:
发生扩容的情况有两种,一种是当存储的容量被使用完了,另一种是当碰撞发生的次数过多,这里将扩容的阈值设置为100。
当两种需要扩容的情况发生一种时,会扩大两倍大小的数组和hash桶。最后将现有的元素拷贝到新的数组中。

浙公网安备 33010602011771号