ArrayList

45 阅读1分钟

东拼西凑的一篇笔记:

ArrayList(与List<T>对比)

  • 非泛型列表
  • 可以将任何Object类型作为元素

性能

ArrayList这个非泛型类和List<T>这个泛型类,为例:

装箱:从值类型转换成引用类型。拆箱:装箱的值类型,转换成值类型。拆箱,要用类型强制转换运算符。

ArrayList

ArrayList存储的每一个元素,都是对象,所以有以下拆装箱过程。

var list = new ArrayList();
list.Add(44); //装箱,把值类型转换成引用类型
int i1 = (int)list[0]  //拆箱,把引用类型转换成值类型
foreach(int i2 in list)
{
    Console.WriteLine(i2); //拆箱
}

拆装箱很容易,但是性能损失较大,遍历很多项时,性能损失尤其大。

List<T>

List<T>,若希望Tint:

  • JIT编译器会动态生成一个类
  • 这个类的每个元素就是int, 而不是对象
  • 因此不需要拆装箱
var list = new List<int>(); 
list.Add(44);  //不装箱,list里存储的就是int类型
int i1 = list[0];   //不拆箱,也无需做类型转换
foreach(int i2 in list)
{
    Console.WriteLine(i2);
}

ArrayList转换成IEnumerable<T>

IEnumerator<int> eee = myArrayList.Cast<int>().GetEnumerator();