ArrayList和List<T>的性能区别

一写在前面

老实说,以前对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);

执行结果贴图:

091755_41eG_1455020.png

三.分析

从结果中我们不难看出,很明显的使用ArrayList是比较耗时的。可是为什么呢?

原因其实我在注释里面已经写了。ArrayList的每一个Add方法,都需要将数据进行装箱操作,而如果提取的值是值类型又会涉及拆箱动作,而装箱和拆箱是有损性能的。是会耗时的。但是使用泛型List《T》确不会涉及装箱和拆箱。这就导致了为什么两者执行的时间确有这么大的差距。前者15.5毫秒,后者9毫秒,请读者自行体会




转载于:https://my.oschina.net/RabbitXiao/blog/666787

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值