容器使用笔记(List篇)

来源:互联网 发布:知不足,然后能自反也 编辑:程序博客网 时间:2024/04/29 04:54

         上一篇博客介绍了Dictionary,这篇博客介绍List的相关内容。

         C#中要存储一组数据,我们会想到数组Array,ArrayList,List这三个对象,其中,数组是最早出现的,我们就从数组开始吧。

         数组有很多优点,数组的使用比较简单,并且数组在内存中是连续存储的,所以数据存取速度比较快。

        定义一个数组Array

        //定义、赋值

<span style="font-size:18px;">    int[] intTest = new int[3];            intTest[0] = 1;            intTest[1] = 2;            intTest[2] = 3;            //修改            intTest[1] = 5;</span>

       但是,数组有很多缺陷,比如说,它的长度就是个大坑,我们在定义数组的时候必须指定数组长度,如果长度过长则浪费内存,如果过短,会编译错误,出现溢出现象,假如我们事先不知道数组的长度,那使用起来简直是坑爹。并且,数据不能删除数据,要插入一条数据,也是相当的困难。

       针对数组的这些问题,C#推出了ArrayList。可以说,ArrayList完美的解决了数组的种种缺陷。ArrayList是System.Collections;命名空间下的集合类,我们在定义ArrayList时,不需要去指定它的长度,它的长度可以在运行时动态改变来满足实际需要。

         ArrayList继承了IList接口,可以方便的进行数据添加、修改、插入、删除操作。代码如下:

<span style="white-space:pre"></span>    //定义、添加数据            ArrayList arrayList = new ArrayList();            arrayList.Add(1);            arrayList.Add(2);            arrayList.Add(3);            //修改            arrayList[0] = "5";            //删除            arrayList.RemoveAt(0);            //插入数据            arrayList.Insert(0, 555);

          ArrayList的存储结构是跟数组的存储结构相同,也是连续存储,所以数据查询和添加速度比较快,但是删除速度比较慢,因为连续存储的数据改变了其中的一个记录,就需要改变整个数组的索引,这个是比较麻烦的。

        ArrayList可以说很好的解决了数组的缺陷,但是它也不是完美的。大家仔细观察上边的代码,会发现,我们给实例arrayList对象的第一个索引值是int类型的1,但是修改数据时,我们改成了string类型的5,也就是说,arrayList 这个对象中,既有int类型数据,也包括string类型数据,那我们在使用的时候,岂不是每次都要去判断呢?假如,我们又多添加了几种类型呢?程序肯定会报错。假如说,我们就是在程序中做了无数的判断,可是系统中装箱、拆箱的操作也能把人折磨死,并且,对内存是一种极大的消耗。

         C#2.0泛型的出现,很好的解决了这个问题。ArrayList的类型安全为程序带来了极大的隐患,List要求在定义的时候必须给出明确的数据类型,所以,List是强类型的集合,并且,泛型的出现,避免了数据交换和存储时装箱和拆箱的操作,极大的减少了内存的损耗。它的用法和arrayList基本相同。代码如下:

<span style="white-space:pre"></span>    //定义、添加数据            List<string> listTest = new List<string>();            listTest.Add("a");            listTest.Add("b");            listTest.Add("c");            //修改            listTest[1] = "abc";            //移除            listTest.RemoveAt(0);            //插入数据            listTest.Insert(0, "Hello World!");

         总结:

数组:数组可以多维度的存储数据,在内存中已顺序表结构存储,通过索引下表来查找数据,查询效率高,数据操作方便。但是,长度固定,数据插入困难,如果需要以多维数据结构存储时推荐使用。

ArrayList:数组的强化版本,长度可变化,内存中已顺序表结构存储,通过索引查找数据,查询效率高,继承了IList接口,数据操作简单。类型不安全,数据查询和存储时需要经过装箱和拆箱操作,内存浪费较大,不建议使用。

ListArrayList的泛型版本,强类型数据集合,数据操作简单,内存中已链式存储结构存在,可以通过索引查询数据,查询效率较高,操作一般集合时建议使用。

0 0
原创粉丝点击