摘要:分配一个新的数组,其长度为当前 Capacity 的两倍。如果当前容量为 0,则扩容为默认初始值(通常为 4)。将现有数组中的元素复制到新数组。将新数组替换为 List 的内部存储。
在 C# 中,List 是一个动态数组,其容量会根据需要动态调整以适应添加的元素数量。这种扩容机制通过以下方式实现:
Capacity: List 内部分配的存储空间(以元素个数为单位)。这是数组的实际长度。Count: 当前 List 中存储的元素数量。List 的 Capacity 初始值可以是默认值(0)或由用户指定。当 Count 超过 Capacity 时,List 会触发扩容。
当添加新元素时,如果 Count + 1 超过当前 Capacity:
分配一个新的数组,其长度为当前 Capacity 的两倍。如果当前容量为 0,则扩容为默认初始值(通常为 4)。将现有数组中的元素复制到新数组。将新数组替换为 List 的内部存储。每次扩容,List 会将容量扩大为之前的 2 倍。这种指数式增长的策略减少了扩容的频率,从而优化性能。
可以通过 List 提供的以下方法控制容量:
EnsureCapacity: 确保 List 的容量至少为指定值。list.EnsureCapacity(100);TrimExcess: 将 Capacity 调整为当前 Count 的大小(如果 Count 足够接近 Capacity)。list.TrimExcess;Capacity 属性: 可手动设置容量值。list.Capacity = 50; // 设置容量为 50using System;using System.Collections.Generic;class Program{static void Main{List numbers = new List;Console.WriteLine($"Initial Capacity: {numbers.Capacity}");for (int i = 1; i Initial Capacity: 0Count: 1, Capacity: 4Count: 2, Capacity: 4Count: 3, Capacity: 4Count: 4, Capacity: 4Count: 5, Capacity: 8Count: 6, Capacity: 8Count: 7, Capacity: 8Count: 8, Capacity: 8Count: 9, Capacity: 16Count: 10, Capacity: 16C# 中 List 的扩容机制通过动态调整容量,使其既具备数组的高效访问特性,又避免了固定大小的限制。通过理解其扩容原理,合理设置容量,可以有效优化性能并减少不必要的内存开销。
来源:面试八股文
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!