.NET C#基础概念系列(一)-- 简述string[]、ArrayList和List的区别
数组的定义:#
数组是特殊的定长线性表,即线性表中的元素又是一个线性表,n维数组是一种“同构”的数据结构,其中每个数据元素类型相同,结构一致。
数组结构的特点:#
(1)数组分配在一块连续的数据空间上,因此在分配空间时必须确定长度。
(2)数据元素类型相同。
(3)数据元素的下标具有上下边界约束且下标有序。
数组的优缺点:#
优点:
(1)数组在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单,效率高,为o(1)。
(2)可以使用折半方法查找元素,效率较高。
1
2
3
4
5
6
7
8
9
|
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)存放的数据类型可以是不同类型的数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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)数据操作是类型安全的且不存在装箱和拆箱操作,因此效率较高。