东拼西凑的一篇笔记:
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>
,若希望T
为int
:
- 则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();