C#数组,ArrayList,List区别

共同点:都能存储一组对象

数组:在内存中时连续存储的,所以索引很快,赋值与修改元素很快,事件复杂度为O(1),折半查找法查找元素效率高。

   增添删除元素的时候需要移动大量元素,因此提供了ArrayList对象

   string[] s = new string[3];

   s[0] = "a";    //赋值

   s[0] = "a1";    //修改

ArrayList: 来自于命名空间System.Collections,他的大小时按照其中存储的数据来动态扩充与收缩的,所以我们在申明

     ArrayList对象的时候不需要指定长度

  ArrayList list = new ArrayList();

  list.Add("abc");  //新增数据

  list.Add("123");  

  list[2] = 345;       //修改数据

  list.RemoveAt(0);  //移除数据

  list.Insert(0,"hello C#");  //出入数据

  注:我们看实例,在list中不仅插入了字符串还有数字,这样在ArrayList中插入不同类型的数据是不允许的。因为这样

    ArrayList会把所有插入其中的数据都当作成object类型来处理。当我们使用ArrayList里的数据时会报类型不匹配错误。

    但即使插入数据时保证数据类型一致,在使用时也要将他转化为对应的原类型来处理,带来性能损耗,这就是拆装箱。

    装箱:就是把值类型的数据打包到引用类型的实例中。

    int i = 123;   object x = (object)i;    //把值类型123赋给object类型的对象x

    拆箱:从引用类型转变成值类型

    object x = 123;int i = (int)x;      //把引用类型123赋值给值类型的变量i

泛型List:由于ArrayList存在拆装箱的性能损耗,后来就有了泛型的概念

    List<int> list = new List<int>();

    list.Add(123);     //添加数据

    list.Add[0] =345;     //修改数据

    list.RemoveAt(0);   //移除数据

  注:上例中,我们插入string字符"helo,C#",IDE就会报错,避免了拆装箱的性能问题了。

 

posted @ 2018-05-24 14:02  超级驼鹿  阅读(353)  评论(0编辑  收藏  举报
/*