数组Array、泛型List和动态数组ArrayList都是存储一组数据的,但是适用性有所不同,当然也有不同的用法。
数组Array
定义时要定义它的长度,不灵活,在进行数据的插入删除操作时比较麻烦,需要用别的数组作为中继,写出方法进行操作,但是它的数据在内存中式连续存储,速度比较快,写代码时操作是最简单的。1
2
3
4//T[] array = new T[Length]; //定义时要加上数组长度和数据类型
int[] a = new int[3]; //定义一个int类型长度为3的Array
a[0] = 1; //赋值
a[0] = 2; //修改
泛型List
泛型相对于数组的优点是它可以随意扩充收缩长短,它在定义时不需要指定泛型List的长度,但也需要定义好数据的类型。1
2
3
4
5
6
7
8//List<T> list = new List<T>(); //定义时不需要定义长度,但要加上数据类型
List<int> b = new List<int>(); //定义一个int类型的List
b.Add(1); //添加
b.Add(2); //添加
//b.Add("abc"); //错误,非同类型数据
b[0] = 3; //修改
b.Remove(1); //按值删除
b.RemoveAt(0); //按索引删除
动态数组ArrayList
动态数组不需要定义数组的长度,和List一样也是随意扩充收缩的,它可以存取任意的类型,将所有的数据以Object类型存储在存入时很舒服,但是取出数据使用时就会出现类型不符的错误,所以需要装箱和拆箱操作,虽然在C#中这些操作不需要自己来做,但是进行这些操作时就占用了内存,影响了性能。1
2
3
4
5
6
7
8
9//ArrayList arrayList = new ArrayList() //定义时不需要定义长度和类型
ArrayList c = new ArrayList(); //定义一个ArrayList
c.Add(1); //添加int类型数据
c.Add("abc"); //添加string类型数据
c.Add(0.1f); //添加float类型数据
c[0] = "abc"; //随意修改数据
c[1] = 1;
c.Remove(1); //按值删除
c.RemoveAt(0); //按索引删除
在我撸代码时,ArrayList基本没用过,一般普通数组和泛型都已经足够用了,不但避免了装箱拆箱的bug隐患,还捎带了考虑内存占用,还能增加代码可读性。拉黑ArrayList是个不错的选择。st是个不错的选择。