30.数组和List的选择

  1. 30.数组和List的选择
    1. 30.1 题目
    2. 30.2 深入解析
    3. 30.3 答题示例
    4. 30.4 关键词联想

30.数组和List的选择


30.1 题目

C#中,你认为什么时候应该使用数组,什么时候应该使用List


30.2 深入解析

数组:
内存占用相对较低(因为容量固定,无法改变容量)
访问速度快
无法动态调整大小
增删容量需要手动复制

List:
内存占用相对较高(额外信息存储,还可以扩容,会产生垃圾)
访问速度相对较慢(因为是对数组的封装)
自动扩容(内部封装了动态扩容)

总的来说
如果数据大小固定且频繁访问,建议使用数组
数据大小不确定且需要增删容量,使用List


30.3 答题示例

“在C#中,数组和List<T>的选择主要取决于数据操作场景:

优先选择数组的场景

  1. 固定大小集合:元素数量在初始化时确定(如游戏中的固定格子、预设配置项)。
  2. 高性能需求:数组是连续内存块,访问效率更高(如频繁遍历的游戏对象池)。
  3. 与外部API交互:部分库或Unity组件(如Mesh.vertices)直接要求使用数组。

优先选择List<T>的场景

  1. 动态增删操作:需要频繁添加或删除元素(如玩家背包系统、动态生成的敌人列表)。
  2. 不确定容量:元素数量在运行时动态变化(如多人游戏中的玩家列表)。
  3. 简化开发List<T>提供AddRemove等封装方法,无需手动管理扩容。

性能考量

  • 数组无额外内存开销,而List<T>扩容时可能产生内存碎片(默认每次扩容为原容量的2倍)。
  • 若需频繁扩容,可通过List<T>.Capacity预先设置初始容量优化性能。”

30.4 关键词联想

  • 连续内存布局
  • 动态扩容机制
  • Array.Copy
  • List<T>.Capacity vs Count
  • 泛型集合
  • 装箱与拆箱
  • 索引器性能
  • 内存碎片
  • 协程与迭代器兼容性
  • 预分配优化


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏