什么是泛型?
定义:
泛型是C#2.0的新增元素,相当于模板(C++),主要用于解决类型问题。
特点:
这个机制允许将类名作为参数传递给泛型类型,并生成相应的对象。
将泛型(包括类、接口、方法、委托等)看做模板,模板中的变体部分将被作为参数传递进来的类名称所代替,从而得到一个新的类型定义。
?由来:
由于ArrayList(所有的数据都是以object数据类型存储)存在不安全类型与装箱拆箱的缺点,所以出现了泛型的概念。
图解:
C#的List<T>泛型集合
定义:
List<T>是C#内置的一个类:泛型集合类。它表示可通过索引访问对象的强类型列表,提供用于对列表进行搜索、排序和操作等方法。
其中 T:指 字符类型(string 、char 、int、float...等)
所属命名空间:
System.Collections.Generic
类和接口:
public class List<T>: IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
特点:
- List<T>类是ArrayList类的泛型等效类。List类也继承了IList接口。
- List<T>集合底层是由数组封装的,由于数组不可改变大小,因此List集合在封装的数组存储满时,需进行数组扩容,自动扩容是以2倍速率进行扩容。
- List<T>类使用大小可以按照需要动态增加的数组实现IList<T>泛型接口,因此实例化该类对象时不需要指定长度。
- List<T>本质和数组是一样的。List<T>类封装了我们操作它内部数组的各种方法。
属性:
- Capacity属性 :获取容量大小
- Count属性 :访问元素个数
方法:
- Add()方法 :添加元素
- Insert()方法 :插入元素
- RemoveAt()方法 :移除指定位置的元素
- [index] :访问元素
- IndexOf()方法 :取得一个元素所在列表中的索引位置(从前往后搜索),未找到返回-1。
- LastIndexOf()方法 :从后往前搜索,搜索到满足条件的就停止,未找到返回-1。
- Sort()方法 : 对列表中的元素进行从小到大的排序。
优点:
- 增加了极大的效力和灵活性。
- 不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以访问元素的效率比较高。
缺点:
由于要操作大量的元素,因此删除和添加元素时,效率相对较低。
声明并创建List<T>类实例
using System.Collections.Generic;//创建控制台应用程序,并添加用于处理集合的泛型类型的命名空间的引用 List<int> num = new List<int>(); //类List<int>声明并创建num对象
向List<T>中添加单元素数据
num.Add(1); //调用List<T>类的Add()方法,添加数据1,2,4,8。
num.Add(2);
num.Add(4);
num.Add(8);
读取数据:
//读取数据 Console.WriteLine(num[0]); Console.WriteLine(num[1]); Console.WriteLine(num[2]); Console.WriteLine(num[3]); Console.ReadKey();
结果为:
添加数组(集合)元素数据
List<int> numberList = new List<int>(); int[] arr1 = {2,5,8,11}; numberList.AddRange(arr1);
通过遍历读取数据:
//遍历方法读取数据 for (int i = 0; i < numberList.Count; i++) { Console.WriteLine(numberList[i]); }
读取结果: