对于一个 C# 开发者,Array 和 List 在容量管理上有哪些关键区别?在什么情况下你需要手动调整容量?
考察说明
考查对 C# 中 Array 和 List 容量管理机制的理解,以及在实际编程中手动调整容量的时机。
回答思路
- 【回答框架 1】Array 在创建时指定固定长度,其容量等于长度,且不可动态变化。List 基于内部数组实现,当元素数量超过容量时,会自动扩容,通常为新容量为旧容量的两倍。
- 【回答框架 2】List 的扩容涉及创建新数组并复制元素,有性能开销,因此需要手动调整容量的场景主要是:预先知道大致元素数量时,使用 List 的构造函数或 Capacity 属性来分配足够容量,避免多次扩容。
- 【回答框架 3】对于 Array,其容量即长度,无法调整,若需要动态大小应使用 List 或其他集合类型。手动调整容量的时机还包括对内存敏感的场合,在 List 使用后通过 TrimExcess 方法减少容量。
- 【回答框架 4】另外,需要注意 Capacity 与 Count 的区别:Capacity 是内部数组可容纳的元素总数,Count 是实际元素个数。当 Count 接近 Capacity 时,可考虑提前增加 Capacity 以优化性能。
- 【关键点 1】Array 容量固定,List 容量自动增长。
- 【关键点 2】List 扩容代价较高,预分配容量可提升性能。
- 【关键点 3】使用 Capacity 属性可手动设置或调整 List 容量。
- 【关键点 4】TrimExcess 可用于减少 List 的多余容量。
- 【易错点 1】误以为 List 增删元素是 O(1) 操作,实际上扩容和插入涉及复制。
- 【易错点 2】对空 List 使用 TrimExcess 不会减少容量。
- 【易错点 3】不考虑内存占用,过度预留容量可能浪费内存。