一:数组数组
//定义 string[] strs = new string[5]; //赋值 strs[0] = "A"; strs[1] = "B"; //修改 strs[1] = "C"; //取值 string getStr = strs[1];
优势:数组在内存中是连续存储的、因此它的索引速度是很是快的、时间复杂度为O(1)、并且它的赋值/修改/获取元素也是很是简单的。安全
缺点:一、定义数组的时候须要指定数组的长度(过长会形成内存浪费、太短会致使程序异常System.IndexOutOfRangeException:"索引超出数组界限")性能
二、插入和删除元素效率低、也比较麻烦。spa
在不清楚数组长度的时候、就很尴尬了。 因此C#提供了ArrayList了来处理这些问题...code
二:ArrayList对象
使用大小会根据须要动态增长的数组。blog
//初始化 ArrayList list = new ArrayList(); //添加元素 list.Add(1); list.Add("A"); list.Add(0.1); //修改元素 list[2] = "B"; //指定索引插入元素 list.Insert(1, "ABC"); //移除元素 list.RemoveAt(1);
优势:一、ArrayList大小会根据须要动态增长的数组。排序
二、实现了IList接口、能够方便的对数据进行添加、插入和删除。索引
缺点:一、ArrayList会把插入的数据都当作object类型来存储、在操做数据的时候可能会由于类型不匹配而出现异常、它是非类型安全的对象。接口
二、因为存储的是object类型、在使用的时候进行类型转换、会形成装箱拆箱、从而损耗性能。
装箱:把值类型转换成引用类型;
拆箱:把引用类型转换成值类型。
//装箱 int i = 1; object obj = (object)i; //拆箱 int j = (int)obj;
因为ArrayList存在类型不安全、装箱拆箱损耗性能。.NET Framework 2.0 推出了List<T>
三:List<T>
表示可经过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操做的方法。
//初始化 List<int> list = new List<int>(); //添加 list.Add(12); list.Add(34); //编译器会进行类型验证、下面代码编译失败 //list.Add("ABC"); //修改 list[0] = 1; //移除 list.RemoveAt(0);
优势:因为泛型List是强类型、编译器会验证类型安全。这样就避免了类型的不安全、以及数据强制转换致使装箱拆箱损耗性能。