一:数组

//定义 string[] strs = new string[5]; //赋值 strs[0] = "A"; strs[1] = "B"; //修改 strs[1] = "C"; //取值 string getStr = strs[1];

优点:数组在内存中是连续存储的、所以它的索引速度是非常快的、时间复杂度为O(1)、而且它的赋值/修改/获取元素也是非常简单的。
缺点:1、定义数组的时候需要指定数组的长度(过长会造成内存浪费、过短会导致程序异常System.IndexOutOfRangeException:"索引超出数组界限")
2、插入和删除元素效率低、也比较麻烦。
在不清楚数组长度的时候、就很尴尬了。 所以C#提供了ArrayList了来处理这些问题...
二:ArrayList
使用大小会根据需要动态增加的数组。

//初始化
ArrayList list = new ArrayList();
//添加元素
list.Add(1);
list.Add("A");
list.Add(0.1);
//修改元素
list[2] = "B";
//指定索引插入元素
list.Insert(1, "ABC");
//移除元素
list.RemoveAt(1);

优点:1、ArrayList大小会根据需要动态增加的数组。
2、实现了IList接口、可以方便的对数据进行添加、插入和删除。
缺点:1、ArrayList会把插入的数据都当做object类型来存储、在操作数据的时候可能会因为类型不匹配而出现异常、它是非类型安全的对象。
2、由于存储的是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是强类型、编译器会验证类型安全。这样就避免了类型的不安全、以及数据强制转换导致装箱拆箱损耗性能。
本文深入探讨了C#中的数组、ArrayList和List<T>三种数据结构的特点与应用。详细对比了它们的优缺点,包括内存分配、索引速度、类型安全及性能损耗等问题。
1571

被折叠的 条评论
为什么被折叠?



