泛型List与ArrayList的比较

来源:互联网 发布:cf视频软件中文版 编辑:程序博客网 时间:2024/06/06 04:13

在讲之前我们先看一下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");

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

原创粉丝点击