You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:12:14