在C#中,List<T>
的扩容机制是一个重要的性能优化设计,其核心逻辑如下:
扩容触发条件
当向列表添加元素时(如Add()
或Insert()
),若当前元素数量Count
等于内部数组容量Capacity
,则会触发扩容。
扩容策略
-
初始容量
空列表的默认容量为0
。首次添加元素时,容量扩展为4。 -
倍增算法
后续每次扩容时,新容量按当前容量的2倍计算: $$ \text{NewCapacity} = \text{CurrentCapacity} \times 2 $$ 例如:- 容量4 → 添加第5个元素 → 扩容至8
- 容量8 → 添加第9个元素 → 扩容至16
-
大容量处理
当容量超过一定阈值(通常为2048
)后,扩容比例会调整为1.5倍(具体实现可能因.NET版本略有差异): $$ \text{NewCapacity} = \lfloor \text{CurrentCapacity} \times 1.5 \rfloor $$
扩容实现步骤
// 伪代码演示扩容逻辑
private void EnsureCapacity(int min)
{
if (Capacity < min)
{
int newCapacity = Capacity == 0 ? 4 : Capacity * 2;
if (newCapacity > 2