一写在前面
老实说,以前对ArrayList和List<T>并没有概念,对很多东西并没有特别深入的认识。那时只知道逻辑是对的就可以了。现在学的越多,也开始慢慢考虑性能问题了。
二先看看代码和运行结果
ArrayList list=new ArrayList();
int listSize=1000000;
long StartTime=DateTime.Now.Ticks;//1个ticks=0.1微妙。10000 ticks=1毫秒
for(int i=0;i<listSize;i++)
{
list.Add(i);//会装箱为将值类型转化为object类型进行存储
}
for(int i=0;i<listSize;i++)
{
int value=(int)list[i];//拆箱,object-》int
}
long EndTime=DateTime.Now.Ticks;
Console.WriteLine("使用ArrayList耗时:{0} Ticks",EndTime-StartTime);
List<int> list1=new List<int>();
int size=1000000;
long start=DateTime.Now.Ticks;
for(int i=0;i<size;i++)
{
list1.Add(i);//不涉及装箱
}
for(int i=0;i<size;i++)
{
int value=list1[i];//不涉及拆箱
}
long end=DateTime.Now.Ticks;
Console.WriteLine("使用List<int>,耗时:{0} Ticks",end-start);
执行结果贴图:
三.分析
从结果中我们不难看出,很明显的使用ArrayList是比较耗时的。可是为什么呢?
原因其实我在注释里面已经写了。ArrayList的每一个Add方法,都需要将数据进行装箱操作,而如果提取的值是值类型又会涉及拆箱动作,而装箱和拆箱是有损性能的。是会耗时的。但是使用泛型List《T》确不会涉及装箱和拆箱。这就导致了为什么两者执行的时间确有这么大的差距。前者15.5毫秒,后者9毫秒,请读者自行体会