泛型List与ArrayList的比较

在讲之前我们先看一下ArrayList的应用:  

ArrayList 是一个使用起来非常方便的集合类,无需进行修改即可用来存储任何引用或值类型。 如:

        ArrayList list1 = new ArrayList();
        list1.Add(1);
        list1.Add(2);

        ArrayList list2 = new ArrayList();
        list2.Add("1");
        list2.Add("2");

问题1: 
  这种方便是需要付出代价的。添加到 ArrayList 中的任何引用或值类型都将隐式地向上强制转换为 Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。

问题2:

  另一个限制是缺少编译时类型检查;因为 ArrayList 将把所有项都强制转换为 Object,所以在编译时无法防止客户端代码执行以下操作:

        ArrayList list1 = new ArrayList();
        list1.Add(1);
        list1.Add("hehe");

        int result = 0;
        for (int i = 0; i < list1.Count; i++)
        {
            result +=int.Parse(list1[i].ToString());
        }

尽管将字符串和 int组合在一个 ArrayList 中的做法在创建异类集合时是完全合法的,有时是有意图的,但这种做法更可能产生编程错误,并且直到运行时才能检测到此错误。

解决方法:

而泛型很好的解决了这两个问题;:

        List<int> listInt = new List<int>();
        listInt.Add(1);
        listInt.Add(2);

        List<string> listStr = new List<string>();
        listStr.Add("str1");
        listStr.Add("str2");

泛型明确的定义了存储的类型;特别适用于列表项是值类型的情况

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值