一步一步剖析Dictionary实现原理(dictionary底层实现)

网友投稿 1538 2022-09-13

一步一步剖析Dictionary实现原理(dictionary底层实现)

一步一步剖析Dictionary实现原理(dictionary底层实现)

目录

关键的字段和Entry结构

添加键值(Add)

取键值(Find)

移除键值(Remove)

再插入键值

本文是对c#中Dictionary内部实现原理进行简单的剖析。如有表述错误,欢迎指正。

主要对照源码来解析,目前对照源码的版本是.Net Framwork 4.8,源码地址。

1. 关键的字段和Entry结构

2. 添加键值(Add)

2.1 数组entries和buckets初始化

2.2 添加键值{1,1},则

hashCode = 1;

targetBucket = hasCode % buckets.Length; //targetBucket = 1

next = buckets[targetBucket]; //next = -1

buckets[targetBucket] = index; //buckets[1] = 0

2.3 添加键值{2,2},则

hashCode = 2;

targetBucket = hasCode % buckets.Length; //targetBucket = 2

next = buckets[targetBucket]; //next = -1

buckets[targetBucket] = index; //buckets[2] = 1

2.4 添加键值{4,4},则

hashCode = 4;

targetBucket = hasCode % buckets.Length; //targetBucket = 1

next = buckets[targetBucket]; //next = 0

buckets[targetBucket] = index; //buckets[1] = 2

接下来将entries数组以单链表的形式呈现(即enteries数组横向);

2.5 在继续添加键值之前,需要扩容操作,因为entries数组长度为3且都已有元素。扩容后需要对buckets和entries每个元素的Next需要重新赋值;

2.6 继续添加键值{22,22},{29,29},{36,36},{40,40},添加完后其内部存储结果如下

3. 取键值(Find)

简化取Key对应值的代码

4. 移除键值(Remove)

共2页: 上一页12下一页

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Windows8开发指南(11)Windows 8背后的数字
下一篇:Windows8开发指南(15)微软为Windows 8引入“复位”和“刷新”功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~