在C#中数组,ArrayList,List都能够存储一组对象。

一、数组

声明:数据类型[] arrayName = new 数据类型[int Length];||数据类型[] arrayName   = new 数据类型[]{aa,bb,cc,dd};

取赋值:obj = arrayName[index];arrayName[index] = obj;

特性:在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。需指定长度

适用场景:在清楚数组长度以及长度固定使使用。

 

二、ArrayList

声明:ArrayList arrayList= new ArrayList();  

操作:arrayList.Add(obj);//添加对象  arrayList.RemoveAt(index);//移除对象 arrayList.Insert(index, obj); //插入对象  arrayList[index] = obj; //赋值||修改值  obj = arrayList[index] ;//取值

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

适用场景:因为ArrayList对数组内的对象没有类型的要求,所以可能存在数组内对象不是同一种类型,也就是ArrayList不是类型安全的。在存储或检索值类型时通常发生装箱和取消装箱操作,带来很大的性能耗损。所以我们在不清楚数组长度以及数组内的对象数据类型是否统一时使用。

 

三、泛型List

声明:List<T> arrayList= new List<T>();  

操作:arrayList.Add(obj);//添加对象  arrayList.RemoveAt(index);//移除对象 arrayList.Insert(index, obj); //插入对象  arrayList[index] = obj; //赋值||修改值  obj = arrayList[index] ;//取值

特性:List类是ArrayList类的泛型等效类,它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。

适用场景:我们在清楚数组长度以及数组内的对象数据类型是否统一时使用。

 

写在后面:数组的容量是固定的,而ArrayList和List的容量可以根据需求进行修改。List相对于ArrayList在使用值类型使的装箱拆箱操作更节省性能消耗。