C# 数组、ArrayList和List的区别

时间:2023-02-06 19:40:21

之前有点搞不清数组、ArrayList和List<T>,感觉都能存放多个数据,但是又搞不清具体有什么区别,今天重点看了下,首先就是数组。

(1)数组

//定义一个数组
int[] aaa = new int[3];
aaa[0] = 1;
aaa[1] = 2;
aaa[2] = 3;
由上面数组的定义可以看出,数组首先就要确定存放数据的类型,也就是说,数组中存放的数据都是一样的;其次,

数组的长度都是固定好的,也就是在定义数组的时候,要确定数组可以存放多少个数据;再次,数组可以具有多个维

度,当然上面的简单代码没有体现出来,比如要定义一个矩阵,就可以定义一个二维数组。

由上面的代码还可以看出,数组的赋值也是很简单的,注意数组第一个元素的角标是0。

(2)ArrayList

虽然数组的赋值取值很方便,但数组也有很多缺点,比如提前要知道数组的长度,在数组中插入元素比较麻烦,所

以有了ArrayList。ArrayList会随着存储数据的多少进行动态扩充,所以在定义一个ArrayList时是不需要提前确定长度

的。

//定义一个ArrayList
ArrayList alist = new ArrayList();
alist.Add(11);
alist.Add("aaa");
上面定义了一个ArrayList,可以看出不需要指定ArrayList实例alist的长度,往alist中添加数据时,调用Add方法即可;

同时,alist中可以存放不同的数据类型。所以ArrayList用起来也很方便,但也存在着问题,先看下面的代码

foreach(int a in alist)
{
Console.WriteLine(a);
}

假如要打印alist中的数据,就会报错,因为alist中可能存放多种数据类型,不是类型安全的。其次,由于alist中既可以

放值类型数据,又可以存放引用类型数据,因此就会存在装箱和拆箱的操作,而装箱和拆箱会损耗性能。

既然数组和ArrayList都存在着缺点,那么就引入泛型List<T>。

(3)List<T>

//声明一个泛型List
List<int> list = new List<int>();
list.Add(111);
list.Add(222);


由上面声明的泛型List可以看出,在实例一个List时,不需要确定长度,这和ArrayList一样。同时,在声明的时候,

泛型List的数据类型也确定了,这就保证了类型安全,同时也就没有了装箱和拆箱的操作,这就是泛型List的好处吧。

还要明的是泛型List只能是一维的。