C#泛型类之List<T>
1、 定义
System.Collections.Generic.List<T>类表示可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法。T为类型参数,代表列表中元素的类型。该类实现了IList<T>泛型接口,是ArrayList类的泛型等效类,其大小可按需动态增加。
2.构造函数
|
名称 |
说明 |
|
List<T>() |
初始化 List<T> 类的新实例,该实例为空并且具有默认初始容量(0)。 |
|
List<T>(IEnumerable<T>) |
初始化 List<T> 类的新实例,该实例包含从指定集合复制的元素并且具有足够的容量来容纳所复制的元素。 |
|
List<T>(Int32) |
始化 List<T> 类的新实例,该实例为空并且具有指定的初始容量。 |
说明:默认向 List<T> 添加元素时,将通过重新分配内部数组,根据需要自动增大容量。如果可以估计集合的大小,那么当指定初始容量后,将无需在向 List<T> 中添加元素时执行大量的大小调整操作。这样可提高性能。
3. List<T>方法
|
名称 |
说明 |
|
Add |
将对象添加到 List<T> 的结尾处。 |
|
AddRange |
将指定集合的元素添加到 List<T> 的末尾。 |
|
AsReadOnly |
返回当前集合的只读 IList<T> 包装。 |
|
BinarySearch(T) |
使用默认的比较器在整个已排序的 List<T> 中搜索元素,并返回该元素从零开始的索引。 |
|
BinarySearch(T, IComparer<T>) |
使用指定的比较器在整个已排序的 List<T> 中搜索元素,并返回该元素从零开始的索引。 |
|
BinarySearch(Int32, Int32, T, IComparer<T>) |
使用指定的比较器在已排序 List<T> 的某个元素范围中搜索元素,并返回该元素从零开始的索引。 |
|
Clear |
从 List<T> 中移除所有元素。 |
|
Contains |
确定某元素是否在 List<T> 中。 |
|
ConvertAll<TOutput> |
将当前 List<T> 中的元素转换为另一种类型,并返回包含转换后的元素的列表。 |
|
CopyTo(T[]) |
将整个 List<T> 复制到兼容的一维数组中,从目标数组的开头开始放置。 |
|
Exists |
确定 List<T> 是否包含与指定谓词所定义的条件相匹配的元素。 |
|
Find |
搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List<T> 中的第一个匹配元素。 |
|
FindIndex(Predicate<T>) |
搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List<T> 中第一个匹配元素的从零开始的索引。 |
|
ForEach |
对 List<T> 的每个元素执行指定操作。 |
|
GetEnumerator |
返回循环访问 List<T> 的枚举器。 |
|
IndexOf(T) |
搜索指定的对象,并返回整个 List<T> 中第一个匹配项的从零开始的索引。 |
|
Insert |
将元素插入 List<T> 的指定索引处。 |
|
InsertRange |
将集合中的某个元素插入 List<T> 的指定索引处。 |
|
LastIndexOf(T) |
搜索指定的对象,并返回整个 List<T> 中最后一个匹配项的从零开始的索引。 |
|
Remove |
从 List<T> 中移除特定对象的第一个匹配项。 |
|
Reverse() |
将整个 List<T> 中元素的顺序反转。 |
|
Sort() |
使用默认比较器对整个 List<T> 中的元素进行排序。 |
|
TrimExcess |
将容量设置为 List<T> 中的实际元素数目(如果该数目小于某个阈值)。 |
|
TrueForAll |
确定是否 List<T> 中的每个元素都与指定的谓词所定义的条件相匹配。 |
说明:上述方法说明中有用到“谓词”,谓词就是Predicate<T> 委托,它代表一组方法,该方法定义一组条件,并确定指定的参数对象是否符合这些条件,具体的参见示例程序。
4. List<T>属性
|
名称 |
说明 |
|
Capacity |
获取或设置该内部数据结构在不调整大小的情况下能够容纳的元素总数。 |
|
Count |
获取 List<T> 中实际包含的元素数。 |
说明:Capacity 是 List<T> 在需要调整大小之前可以存储的元素数,Count 则是 List<T> 中实际存储的元素数。
5.示例程序

{
returntrue;
}
else
{
returnfalse;
}
}
//定义打印集合的方法
privatestaticvoid Print(string s)
{
Console.WriteLine(s);
}
}

6.备注
1、 List<T> 类既使用相等比较器又使用排序比较器。
- 诸如 Contains、IndexOf、LastIndexOf 和 Remove 这样的方法对列表元素使用相等比较器。类型 T 的默认相等比较器按如下方式确定。如果类型 T 实现 IEquatable<T> 泛型接口,则相等比较器为该接口的 Equals(T) 方法;否则,默认相等比较器为 Object.Equals(Object)。
- 诸如 BinarySearch 和 Sort 这样的方法对列表元素使用排序比较器。类型 T 的默认比较器按如下方式确定。如果类型 T 实现 IComparable<T> 泛型接口,则默认比较器为该接口的 CompareTo(T) 方法;否则,如果类型 T 实现非泛型 IComparable 接口,则默认比较器为该接口的 CompareTo(Object) 方法。如果类型 T 没有实现其中任一个接口,则不存在默认比较器,并且必须显式提供比较器或比较委托。
2、 List<T> 不保证是排序的。在执行要求 List<T> 已排序的操作(例如 BinarySearch)之前,您必须对 List<T> 进行排序。
3、 List<T> 不保证是排序的。在执行要求 List<T> 已排序的操作(例如 BinarySearch)之前,您必须对 List<T> 进行排序。
4、 使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。
5、 List<T> 接受 null 作为引用类型的有效值并且允许有重复的元素。
6、 大多数情况下List<T>执行得更好并且是类型安全的,可以替换ArrayList,但是如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List<T> 类的实现。这意味着不必对 List<T> 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。如果创建小于500个元素,建议使用ArrayList.
C#泛型类之List<T>的更多相关文章
- StructureMap.dll 中的 GetInstance 重载 + 如何利用 反射动态创建泛型类
public static T GetInstance<T>(ExplicitArguments args); // // Summary: // Creates a new instan ...
- C#如何创建泛型类T的实例
最近在学历基类的写法时,遇到了一个问题:如何怎么创建一个泛型类T的实例呢? 废话不多说了,直接上代码吧,目前发现三种方法,先贴上,以后再总结,希望能帮助跟我遇到同样问题的朋友. 方法一,通过外 ...
- 使用C#反射中的MakeGenericType函数,来为泛型方法和泛型类指定(泛型的)类型
C#反射中的MakeGenericType函数可以用来指定泛型方法和泛型类的具体类型,方法如下面代码所示这里就不多讲了,详情看下面代码一切就清楚了: using System; using Syste ...
- 设计一个泛型类orderedCollection
设计一个泛型类orderedCollection,它存储的Comparable对象的集合(在数组中),以及该集合的当前大小.提供public方法isEmpty,makeEmpty,insert,rem ...
- 设计一个泛型类Collection
要求:设计一个泛型类Collection,它存储object对象的集合(在数组中),以及该集合当前的大小.提供public方法isEmtpy,makeEmpty,insert,remove,isPre ...
- Java泛型学习笔记 - (二)泛型类
1. 我们先写一个没有泛型的类Box: public class Box { private Object obj; public Box() {} public Object getObj() { ...
- List和Dictionary泛型类查找效率浅析
List和Dictionary泛型类查找效率存在巨大差异,前段时间亲历了一次.事情的背景是开发一个匹配程序,将书籍(BookID)推荐给网友(UserID),生成今日推荐数据时,有条规则是同一书籍七日 ...
- java 泛型 -- 泛型类,泛型接口,泛型方法
泛型T泛型的许多最佳例子都来自集合框架,因为泛型让您在保存在集合中的元素上指定类型约束.在定义泛型类或声明泛型类的变量时,使用尖括号来指定形式类型参数.形式类型参数与实际类型参数之间的关系类似于形式方 ...
- paip.自定义java 泛型类与泛型方法的实现总结
paip.自定义java 泛型类与泛型方法的实现总结 ============泛型方法 public static <atiType,retType> retType reduce ...
- Scala 深入浅出实战经典 第42讲:scala 泛型类,泛型函数,泛型在spark中的广泛应用
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
随机推荐
- noip2014总结
noip总结 经过七周的停课,我们终于迎来了期盼已久的noip考试.在这一次的noip考试中,我们经历了很多,也收获了很多.当然这一次考试中也有很多值得总结的地方,特写此总结. 这一次考试考得还不错, ...
- ntp服务器池列表
CentOS: 0.centos.pool.ntp.org 1.centos.pool.ntp.org 2.centos.pool.ntp.org 国内可用的 ntp.fudan.edu.cn 复旦 ...
- canvas.js | CLiPS
canvas.js | CLiPS canvas.js The canvas.js module is a simple and robust JavaScript API for the HTML5 ...
- Strurts(四)——从Struts原型模拟看大道至简(含实例下载)
首先,需要再次声明的是:struts是web层的框架.在介绍struts的第一篇文章就已经有了论述,如果不使用struts框架同样可以进行开发,但是需要在Servlet里面写大量的“if……else… ...
- distinct() 去重复
distinct 是对整个结果集进行数据重复抑制,而不是针对每一个列. select distinct FDepartment from T_Employee
- cocos2dx lua 学习笔记(二)
安装开发环境 sublime - http://www.sublimetext.com/2 package control - http://packagecontrol.io/installatio ...
- #include<math.h>
1.sin(a)类:a是弧度值: 2.abs(b):结果是b的绝对值: 3.exp(c):exp()用来计算以e为底的x次方值,即ex值,然后将结果返回.返回值: 返回e的x次方计算结果. 4.log ...
- serialVersionUID作用
serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的 ...
- java面试题集2
JAVA面试题-CORE JAVA部分 1. 在main(String[] args)方法内是否可以调用一个非静态方法? 答案:不能 2. 同一个文件里是否可以有两个public ...
- pt-online-schema-change解读
[用途]在线改表 [注意风险]因为涉及到修改表的数据和结构,所以在使用前要小心测试并做好备份,工具默认不会改表,除非你添加了--execute参数 [工具简介] pt-osc模仿MySQL内部的改表方 ...