首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

DotNet Dictionary 实现简介

freeCount;   空实体数量(指定entry被填充,然后又被清除就出现一个空实体,后面还没有被填充的实体不计入此数量) private int _version;   版本(实体发生实质改动时++,用于遍历时确认列表有没有发生变化...2个关键信息 index: 这个索引很重要,通过 [ hashcode(key)%_buckets.len ] 确定指定key应该落到的索引位置(不用遍历key,通过轻量计算可以快速直接找到数据) value...这里有几点会被考虑到 数据是以怎样的顺序存入的 如何高效查找数据(不通过遍历的方式) 如何处理碰撞 移除数据产生的空闲位如何重复利用 如何扩容 要搞清楚上面的问题,主要就是理解Dictionary元素的添加...HashTable不同,因为HashTable内部只维持着一个数据数组,数据会直接存放在槽位上) 在Dictionary使用中您会发现,如果只插入数据不删除数据,那遍历的结果其实是有序的,它会与您插入时的顺序维持一致...主要用在遍历中,最常见的foreach就会用到,所以我们说在遍历时是不能改变集合内容。

29710

.net源码分析 – Dictionary

例子 Dictionary的代码比List相对复杂些,下面不直接分析源码,而是以下面这些常用例子来一步一步展示Dictionary是怎么工作的: 1 Dictionary<string, string...,是的话直接遍历它的entries,加到当前的entries里,如果不是则用枚举器遍历。...另外还有不少代码是为了实现Enumerator,毕竟Dictionary支持KeyValuePair, Key, Value三种方式遍历,其实这三种遍历都是对Entries数组的遍历,这里就不多做分析了...Dictionary也不是线程安全,多线程环境下需要我们自己加锁,和List一样也是通过version来确保遍历时集合不被修改。...Dictionary遍历有三种,KeyValuePair,Key, Value,这三个本质都是遍历entries数组。

1.7K50
领券