轻量级前端框架助力开发者提升项目效率与性能
1538
2022-09-13
一步一步剖析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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~