SortedList的Capacity属性工作原理:构造函数设容量2为何仍可添加元素?
关于SortedList的Capacity属性工作原理的解答
嘿,这个问题问得特别好!不少刚接触SortedList的开发者都会把Capacity和“最大元素限制”搞混,咱们来把这个事儿说清楚:
Capacity不是“上限”,是内部数组的初始大小
当你在构造函数里设置Capacity=2时,你只是告诉SortedList:“一开始先给我分配能装2个元素的内部数组空间”,而不是“最多只能装2个元素”。它的本质是预分配内存,用来优化性能,而不是限制元素数量。自动扩容机制在背后起作用
当你添加的元素数量超过当前Capacity时,.NET会自动触发扩容逻辑:它会创建一个更大的新数组(通常是原Capacity的2倍,具体倍数可能因.NET版本略有调整),然后把原来数组里的元素全部复制到新数组中,之后就可以继续添加新元素了。这就是为什么你设置了Capacity=2,却依然能添加更多元素的核心原因。举个直观的例子
假设你这么初始化:var mySortedList = new SortedList<int, string>(2); mySortedList.Add(1, "First"); mySortedList.Add(2, "Second"); // 此时已经用满了初始的Capacity=2 mySortedList.Add(3, "Third"); // 这一步会触发自动扩容执行第三行
Add时,内部会把数组扩容到4(假设是2倍),把前两个元素复制过去,再加入第三个元素,整个过程是自动完成的,你完全不需要手动干预。手动设置Capacity的意义
如果你提前知道要添加的元素数量,手动设置一个合适的Capacity可以避免多次自动扩容——因为每次扩容都要复制数组,会带来额外的性能开销。比如你要添加1000个元素,一开始就把Capacity设为1000,就能省去多次扩容的复制操作,提升效率。
内容的提问来源于stack exchange,提问作者daniell89
相关产品推荐
相关产品推荐

