.NET C#基础概念系列(一)-- 简述string[]、ArrayList和List的区别
数组的定义:
数组是特殊的定长线性表,即线性表中的元素又是一个线性表,n维数组是一种“同构”的数据结构,其中每个数据元素类型相同,结构一致。
数组结构的特点:
(1)数组分配在一块连续的数据空间上,因此在分配空间时必须确定长度。
(2)数据元素类型相同。
(3)数据元素的下标具有上下边界约束且下标有序。
数组的优缺点:
优点:
(1)数组在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单,效率高,为o(1)。
(2)可以使用折半方法查找元素,效率较高。
string[] array = new string[3]; //赋值 array[0] = "a"; array[1] = "b"; array[2] = "c"; //修改 array[2] = "a1";
缺点:
(1)数组必须在声明的时候指定数组长度和维数,并且在存取数组元素的时候不能越界,越界会造成数据溢出错误。
(2)插入和删除元素效率比较低,且比较麻烦。
ArrayList的定义
ArrayList是动态数组,是Array的复杂版本,它提供了动态添加和减少元素,实现了ICollection和IList接口,可以灵活设置数组的大小。
ArrayList的特点
(1)ArrayList数组的长度可以动态指定,其大小可以在初始化时指定,也可以不指定,因此其在托管堆上存放并不一定连续。
(2)ArrayList数据可以存放不同类型数据(因为它里面存放的都是被装箱了的Object类型,实际上ArrayList内部就是使用"object[] _items;"这样一个私有字段来封装对象的)。
(3)ArrayList可以在任意位置插入或删除数项。
ArrayList的优缺点
优点:
(1)初始化时可以不指定长度,并且可以动态插入或删除项,其长度可以动态扩充和收缩。
(2)存放的数据类型可以是不同类型的数据。
ArrayList arrayList = new ArrayList(); //添加 arrayList.Add("a"); arrayList.Add("b"); 结果为ab //插入 arrayList.Insert(0,"cc"); 结果为ccab //移除 //从ArrayList中移除特定对象的第一个匹配项,注意是第一个 arrayList.Remove('c'); 结果为cab //移除ArrayList的指定索引处的元素 arrayList.RemoveAt(0); 结果为ab; //清除所有元素 arrayList.Clear(); //排序 arrayList.Sort(); //查找 arrayList.IndexOf("a")
缺点:
(1)ArrayList不是类型安全的,其插入的数据当做Object类型处理,因此在处理数据是可能会报类型不匹配错误。
(2)由于存在装箱和拆箱操作,会带来很大的性能损耗,所以存取效率低。
List的定义
List是ArrayList的范型等效类,List类也继承了IList接口,其大部分用法与ArrayList相似,最关键的区别是,在声明List集合时需要为其声明List集合内数据的对象类型,往List中插入其它(非声明数据类型)数据类型元素时将会报错,因此其是类型安全的。
数组结构的特点:
(1)声明时必须指定数据集内元素的数据类型,且数据元素类型必须相同。
(2)可以动态插入或删除数据元素。
(3)数据操作是类型安全的且不存在装箱和拆箱操作,因此效率较高。