C#面试题更新 2026-08-03

对于一个 C# 开发者,Array 和 List 在容量管理上有哪些关键区别?在什么情况下你需要手动调整容量?

考察说明

考查对 C# 中 Array 和 List 容量管理机制的理解,以及在实际编程中手动调整容量的时机。

回答思路

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