数组、ArrayList和List三者的区别

数组的容量是固定的,只能一次获取或设置一个元素的值,ArrayList和List<T>的容量可根据需要自动扩充、修改、删除或插入数据。

数组

数组是在内存中连续存储的,所以索引速度非常快,赋值和修改比较交单。

 1         //声明数组
 2         string[] str = new string[2];
 3         //声明数组并赋值
 4         //string[] str = { "a", "b" };
 5 
 6         //赋值
 7         str[0] = "a";
 8         str[1] = "b";    
 9 
10         //修改
11         str[1] = "c"; 

但是数组在声明时需要指定数组的长度,长度过长会造成内存浪费,过短会造成数据溢出,如果声明时不清楚数组的长度就会比较麻烦,另外在数组中插入数据比较麻烦。

ArrayList

ArrayList使用时必须引用using System.Collections;

 

 1         //声明
 2         ArrayList arrayList = new ArrayList();
 3 
 4         //新增
 5         arrayList.Add("a");
 6         arrayList.Add("b");
 7         arrayList.Add(123);
 8 
 9         //插入指定索引位置数据
10         arrayList.Insert(0, 123); 
11 
12         //修改指定索引位置数据
13         arrayList[2] = 234;
14 
15         //删除匹配数据
16         arrayList.Remove("a");
17         //删除指定索引数据
18         arrayList.RemoveAt(1);

在arrayList中,不仅插入了字符串a,还插入了数字123。这样在ArrayList中插入不同类型的数据是允许的。ArrayList会把所有插入其中的数据当作为object类型来处理,在使用ArrayList处理数据时,可能会报类型不匹配,也就是ArrayList不是类型安全的。在存储或检索值类型时通常发生装箱和取消装箱操作,带来很大的性能耗损

装箱与拆箱的概念:
装箱:就是将值类型的数据打包到引用类型的实例中
比如将string类型的值a赋给object对象obj

拆箱:就是从引用数据中提取值类型
比如将object对象obj的值赋给string类型的变量str

1         //装箱
2         string str = "a";
3         object obj = (object)str;
4 
5         //封箱
6         object obj = "a";
7         string str = (string)obj;

List

在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。

 1         //声明
 2         List<string> list = new List<string>();
 3 
 4         //新增
 5         list.Add("a");
 6         list.Add("b");
 7 
 8         //修改
 9         list[0] = "c";
10 
11         //移除指定匹配项
12         list.Remove("a");
13 
14         //移除对应索引值
15         list.RemoveAt(0);

 

posted on 2020-11-18 17:52  龟仙人没有龟  阅读(424)  评论(0编辑  收藏  举报

导航