这篇文章会介绍,.net中Dictionary每次扩容的时候,为什么要大于等于原有空间的2倍的最小质数。
回答问题前,先看代码
1:c#中Dictionary的扩容代码,主要看三段:
第一段代码:新增元素前,如果发生扩容,就会调用ExpandPrime()方法,这个方法主要实现两个功能,第一:空间扩大二倍,第二:根据最新的空间(newSize),去调用GetPrime(),返回大于等于newSize的最小质数
第二段代码:返回大于等于newSize的最小质数
第三段代码:这是默认的一组质数(空间换时间),如果大于预置的质数,则会根据质数的算法生成新的质数。
原因:质数使数据分布更均匀
1:Dictionary数据结构图: