C#总结之数组、Arraylist、List的区别

数组


数组在C#中是最早出现的,在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单

数组:相同数据类型的元素按一定顺序排列的集合,数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
我的理解就是把一堆同一类型的变量按照一定的顺序组织起来就叫做数组

    string[] s = new string[2];
            //赋值
            s[0] = "a";
            s[1] = "b";
            //修改
            s[1] = "c";

而数组对于我们来说就是比较简单方便使用的但是对于在数组中插入一个数据的时候是很麻烦的,而且声明数组的时候要指定数组的长度,如果数组长度过长,会造成内存浪费,过段会造成数据溢出的错误,如果在声明数组时不知道数组的长度,就会变得很麻烦

同时,数组也有很多缺点。数组分配在一块连续的数据空间上,因此分配空间时必须确定大小。空间的连续,也导致了存储效率低,插入和删除元素效率比较低,而且麻烦。如果,要增添一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样,你想删除一个元素,需要移动大量元素去填补被移动的元素。
所以 C# 提供了一个 Arraylist 来克服这些缺点

ArrayList


ArrayList 是命名空间 System.Collections 下的一部分,在使用该类时必须进行引用,同时继承了 IList 接口,提供了数据存储和检索。ArrayLis t对象的大小是按照其中存储的数据来动态扩充与收缩的。所以,在声明 ArrayList 对象时并不需要指定它的长度。
它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。

ArrayList  随便的放各种类型的数据,并且不确定放多少个
ArrayList.Add(值)
Arraylist[1]=新值   //更换原来索引对应的值
    ArrayList a = new ArrayList();
            //增加数据
            a.Add("abc");
            a.Add("123");
            //修改数据
            a[2] = 34;
            //移除数据
            a.RemoveAt(0);
            //插入数据
            a.Insert(0, "abc");


ArrayList好像是解决了数组中所有的缺点,为什么又会有List?

在 a 中,不仅插入了字符串 cde,而且插入了数字 5678。这样在 ArrayList 中插入不同类型的数据是允许的。因为 ArrayList 会把所有插入其中的数据当作为object类型来处理,在使用 ArrayLis t处理数据时,很可能会报类型不匹配的错误,
既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。

装箱拆箱


装箱:将值类型赋值给引用类型,对于值类型中的引用成员保留原数据
拆箱:将引用类型赋值给值类型

List


因为 ArrayList 存在不安全类型与装箱拆箱的缺点,所以出现了泛型的概念。List 类是 ArrayList 类的泛型等效类,它的大部分用法都与 ArrayList 相似,因为List类也继承了 IList 接口。最关键的区别在于,在声明 List 集合时,同时需要为其声明 List 集合内数据的对象类型。

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

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

            //修改数据  
            list[0] = "def";

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


如果往 List 集合中插入 int 数组 123,IDE 就会报错,且不能通过编译。这样就避免了前面讲的类型安全问题与装箱拆箱的性能问题了。

总结

可能有的地方不是很完善,理解的不够透彻吧,希望大家能够帮我指出错误,如果可以能否点个赞再走呢

猜你喜欢

转载自blog.csdn.net/Zhang_0507/article/details/80299669