C#泛型与非泛型集合类的区别与使用详解
程序员文章站
2024-03-14 23:06:01
...
一.泛型与非泛型集合类在C#程序中是一个非常重要的基础概念,这里列一个表来进行对比:
非泛型集合类 | 泛型集合类 | 描述 |
---|---|---|
ArrayList | List | 表示具有动态大小的对象数组 |
Hashtable | Dictionary<Tkey,Tvalue> | 由键值对组成的集合 |
SortedList | SortedList<Tkey,Tvalue> | 和字典相似但有排序功能的集合 |
Queue | Queue | 表示标准的先进先出(FIFO)队列 |
Stack | Stack | 后进先出(LIFO)队列,提供压入和弹出功能 |
ArrayList中将所有元素都看成Object类型的,是引用类型。
1.泛型与非泛型集合类在概念和功能上各有不同,其中非泛型集合类在取出值时需要进行类型的转换操作,如果加值类型会引起装箱和拆箱的操作,这会带来巨大的性能额外开销,如果掌握好泛型数组之后可以不再需要用非泛型的数组了,同时带来类型安全的好处并减少在值类型和引用类型之间的装箱和拆箱。
2.使用泛型类型可以最大限度地重用代码、保护类型安全性以及提高性能。泛型最常见的用途是创建集合类 List。
3.可以创建:泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
第一:ArrayList(非泛型集合)和List(泛型集合)
- 1.Array的容量是固定的,ArrayList的容量是根据需要自动扩展的(直接New ArrayList()添加数据自动扩展)
- ArrayList 提供添加、插入或移除某一范围元素的方法。在 Array 中,您只能一次获取或设置一个元素的值。
- a.可以设置 Array 的下限,但 ArrayList 的下限始终为零。 b.Array 可以具有多个维度,而 ArrayList 始终只是一维的。
- ArrayList可以不用指定维数 可动态赋值 赋不同类型值。Array的容量是固定的 先指定大小 再赋值
ArrayList arrayList1 = new ArrayList();
arrayList1.
arrayList1.Add("a");
arrayList1.Add(1);
arrayList1.Add("b");
Response.Write(arrayList1[1]);
Array arrayList2 = Array.CreateInstance(typeof(string), 6);//先指定长度
arrayList2.SetValue("a", 0);
arrayList2.SetValue("b", 1);
Response.Write(arrayList2.GetValue(1));
- ArrayList提供的方法:Clone()复制一个数组。
List泛型集合
- 泛型最重要的应用是集合操作,使用泛型集合可以提高代码的重用性,类型安全和更佳的性能。
- 在泛型定义中,泛型类型参数“”是必须指定的,其中T是定义泛型类时的占位符,其并不是一种类型,仅代表某种可能的类型。“”中的T可以对集合中的元素类型进行约束。
List与ArrayList的区别>>>
ArrayList可以New一下添加任意类型元素;List对添加的元素具有类型约束;
ArratList添加时装箱,读取时拆箱;List不需要装箱,拆箱操作;
ArratList添加时装箱,读取时拆箱,因为ArrayList中将所有元素都看成Object类型的,是引用类型。
当涉及大量装箱与拆箱操作时,必然会影响应用程序的性能。而是用泛型的集合类时就会减少装箱与拆箱的工作,当存在大量数据时,自然可以提高很多性能。
在泛型定义中,泛型类型参数“”是必须指定的,List有更好的类型安全性,无须拆,装箱。