C#-数组、ArrayList和List三者的区别

目录

C#中数组、ArrayList和List三者的区别

C#中ArrayList和List的区别

C#中数组、ArrayList和List三者的区别

先出现的数组,数组是连续存储,因此可以快速而容易地从头到尾遍历元素,赋值与修改元素简单。但是数组必须规定长度。过长浪费空间,过短产生溢出。而且往两个数组中间插入数值不方便。 

为了解决这些缺点产生了ArrayList:ArrayList是命名空间System.Collections下的一部分,对象的大小是按照其中存储的数据来动态扩充与收缩的。所以,在声明ArrayList对象时并不需要指定它的长度。同时可以随意的添加,修改元素,比数组方便。

缺点:ArrayList中可以插入不同类型的数据。ArrayList会把所有插入其中的数据当作为object类型来处理,在我们使用ArrayList处理数据时,很可能会报类型不匹配的错误,也就是ArrayList不是类型安全的。在存放值类型时,都需要将值类型装箱为Object对象,使用集合元素时,还需要执行拆箱操作,带来很大的性能耗损。

引入List:在实例化时都需要指定其内部项的数据或对象类型,避免了类型安全问题与装箱拆箱的性能问题。

C#中ArrayList和List的区别

不同:性能,存储对象类型。

 在C#中数组,ArrayList,List都能够存储一组对象。List就像火车,ArrayList就像小轿车。List对于装载的事物有限制,就像火车要么拉人,要么拉货。

ArrayList小轿车,想拉什么就拉什么,速度比火车慢。 所以我们在编程中尽量不用ArrayList,因为什么都放,会导致无法用特定类型接收,取出时需要强转。 

第三点不同:拆箱和装箱问题。

ArrayList:首先将类型转换为Object,也就是装箱。然后将Object转换为其所对应的类型,也就是拆箱的操作。

拆箱,装箱:

装箱就是把值类型打包到Object引用类型的一个实例中。比如整型变量i被装箱并赋值给对象o。

int i =123;
object o=(object) i;

拆箱就是指从对象中提取值类型。如下:对象o拆箱并将其赋值给整型变量i。

o = 123;
i = (int)o;

List:因为泛型中指定了类型所以其不需要进行拆装箱操作,效率也就相对提升了。

第四点:List在使用的时候需要导入的using指令为using System.Collections.Generic;

 ArrayList在使用的时候需要导入的using指令为using System.Collections;

第五点:List属于泛型集合 ArrayList属于非泛型集合。通常情况下,建议使用泛型集合。

你可能感兴趣的:(C#)