Array与Array List有显着差异?

时间:2012-05-25 01:27:26

标签: c# arrays arraylist

  

可能重复:
  When to use ArrayList over array[] in c#?

从内存或处理器成本的角度来看,数组和arrayList对象之间是否存在显着差异?

2 个答案:

答案 0 :(得分:6)

数组是一种低级数据结构,实质上映射到内存中的某个区域。 ArrayList是一个可变长度列表,实现为object数组,随着列表的增长重新分配。

因此,

ArrayList有一些与管理内部数组大小相关的开销,以及与访问列表时将对象转换为正确类型相关的更多开销。

此外,将所有内容存储为object意味着值类型在写入时被装箱,在读取时被取消装箱,这对性能极为不利。使用List<T>,类似但强类型的变量大小列表可以避免此问题。

事实上,自.NET 2.0起,ArrayList实际上已被弃用,而不是List<T>

答案 1 :(得分:1)

数组是固定大小的连续内存块,而ArrayList(尽管你应该更喜欢自.NET 2.0以来的List)包装数组以提供动态可调整大小的存储。

它们之间的“差异”是,只要它们被封装,ArrayList是可调整大小的,而数组则不是。就实现而言:因为ArrayList包装(并重新分配)数组,它将需要比数组更多的内存(因为它必须知道当前的元素数量,而不是它的容量),此外还有一个ArrayList如果内部数组达到其内部容量,则需要CPU时间来重新分配和复制其内部数组。

但是,实例化ArrayList并不比分配数组贵。唯一的区别是初始化ArrayList状态所需的少量指令。差异可以忽略不计,不值得担心。

你会发现,如果你自己重新分配数组作为创建可调整大小的集合的方法,那么你最好使用ArrayList / List,因为它已经过彻底的测试。