C#泛型List的用法
C#泛型List的用法
来源:C#学习 发布时间:2014/1/4
一、List<T>命名空间:
System.Collections.Generic(程序集:mscorlib)
二、List<T>描述:
1)、表示可通过索引访问的对象的强类型列表;提供用于对列表进行搜索、排序和操作的方法。
2)、是ArrayList类的泛型等效类。
3)、可以使用一个整数索引访问此集合中的元素;索引从 零 开始。
4)、可以接收null空引用(VB中的Nothing)。
5)、允许重复元素
三、List<T>构造函数
| 名称 | 说明 |
| List<T>() | 初始化 List<T> 类的新实例,该实例为空并且具有默认初始容量(0)。 |
| List<T>(IEnumerable<T>) | 初始化 List<T> 类的新实例,该实例包含从指定集合复制的元素并且具有足够的容量来容纳所复制的元素。 |
| List<T>(Int32) | 始化 List<T> 类的新实例,该实例为空并且具有指定的初始容量。 |
说明:默认向 List<T> 添加元素时,将通过重新分配内部数组,根据需要自动增大容量。如果可以估计集合的大小,那么当指定初始容量后,将无需在向 List<T> 中添加元素时执行大量的大小调整操作。这样可提高性能。
四、List<T>属性
| 名称 | 说明 |
| Capacity | 获取或设置该内部数据结构在不调整大小的情况下能够容纳的元素总数。 |
| Count | 获取 List<T> 中实际包含的元素数。 |
说明:Capacity 是 List<T> 在需要调整大小之前可以存储的元素数,Count 则是 List<T> 中实际存储的元素数。
五、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> 委托,它代表一组方法,该方法定义一组条件,并确定指定的参数对象是否符合这些条件,具体的参见示例程序。
六、常用方法实例
(1)创建及初始化:
List<string> myList = new List<string>();//初始Capacity为 零
List<string> myList2 = new List<string>(30); //初始Capacity为 30
List<string> myList3 = new List<string>(new string[] { "1", "a", "2", "b" });//初始Capacity 为 4,并且元素已被复制
(2)添加一个元素 List.Add(T item)
mlist.Add("d");
(3)添加集合元素
string[] Arr2 ={"f","g"."h"};
mlist.AddRange(Arr2);
(4)在index位置添加一个元素 Insert(int index,T item)
mlist.Insert(1,"p");
(5)遍历List中元素
foreach(T element in mlist) T的类型与mlist声明时一样
{
Console.WriteLine(element);
}
(6)删除元素
List.Remove(T item) 删除一个值
mlist.Remove("a");
List.RemoveAt(int index);删除下标为index的元素
mlist.RemoveAt(0);
List.RemoveRange(int index,int count); 下标index开始,删除count个元素
mlist.RemoveRange(3,2);
////用法举例
List<int> list = new List<int>() { 2, 3, 6, 9, 11, 23, 89 };
int temp = 0;
for (int i = 0; i < list.Count; i++)
{
if (list[i] == 9)
{
temp = i;
}
}
list.RemoveRange(0,temp);
foreach (var item in list)
{
Console.WriteLine(item);
}
Console.ReadKey();
(7)判断某个元素是否在该List中
List.Contains(T item) 返回true或false
if(mlist.Contains"("g"))
Console.WriteLine("g存在列表中");
else
mlist.Add("g");
(8)给List里面元素排序 List.Sort() 默认是元素每一个字母按升序
mlist.Sort();
(9)给List里面元素顺序反转 List.Reverse() 可以与List.Sort()配合使用
(10)List清空 List.Clear()
mlist.Clear();
(11)Capacity与Count
1)、Capacity在需要调整大小之前可存储的元素数;Count实际存储的元素数。
2)、Capacity总是大于或者等于Count
七、List<T>的注意事项
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的用法的更多相关文章
- C#中Predicate<T>与Func<T, bool>泛型委托的用法实例
本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 ...
- Java泛型总结---基本用法,类型限定,通配符,类型擦除
一.基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化.例如在哈希表的存取中,JDK1.5之前使用HashMap的 ...
- Java 泛型 四 基本用法与类型擦除
简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...
- 泛型Dictionary的用法详解
泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的 ...
- Java泛型的一点用法(转)
1.一个优秀的泛型,建议不要这样写public static <K, V> Map<K, V> getMap(String source, String firstSplit, ...
- 委托、Action泛型委托、Func泛型委托、Predicate泛型委托的用法
一.举一委托场景:天气很热,二狗子想去买瓶冰镇可乐,但是二狗子很懒,于是他想找个人代他去,于是要有个代理人. 创建代理人之前先定义委托:public delegate string BuyColaDe ...
- fastjson带泛型反序列化的用法
这个问题之前就遇到了,虽然猜到有现成解决办法,但是一直没有正面解决,今天找到了解决方案,mark一下. 主要就是一个TypeReference的使用. 直接上代码比较容易看懂. 1.泛型 public ...
- Java返回类型泛型的用法小结
Java返回类型泛型的用法小结 版权声明:本文为博主原创文章,未经博主允许不得转载. 关于Java泛型的基本用法就不多说了,主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型D ...
- [Effective Java]第五章 泛型
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
随机推荐
- 【01:转自知乎:关于 openSUSE 】
我是 openSUSE 中文维基唯一的非官方维护者,openSUSE 简体中文翻译团队召集人,linuxsir SuSE 版块的版主,openSUSE 官方论坛 http://forums.opens ...
- html5,input,表单
<form action="3.html">email:<input type="email" name="email" ...
- Android Studio的git功能的使用
初次使用AS自带的git工具的配置 初次使用AS自带的git工具需要设置一些配置,如果你已配置过,可跳过该部分内容. 首先你需要下载git,然后打开AS的git设置,路径如下,选择你安装在你电脑上的g ...
- Oracle常用日期函数
常用的时间格式掩码如下:掩码元素 含义YYYY 四位数年份 (如:2005) yearYY 二位数年份(如 05) Q ...
- Linux应用程序访问字符设备驱动详细过程【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/51346532 下面先通过一个编写好的内核驱动模块来体验以下字符设备驱动 可以暂时 ...
- 前端Html和Css面试题
前端Html和Css面试题Html篇:1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内核 Safari:webkit内核 Ope ...
- 20145227&20145201 《信息安全系统设计基础》实验二 固件开发
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)鄢曼君 李子璇 学号:(按贡献大小排名)20145227 20145201 成绩: ...
- 【转】本地存储-localStroage/sessionStorage存储
原文地址:[js学习笔记-103]----本地存储-localStroage/sessionStorage存储 客户端存储 l WEB存储 web存储最初作为html5的一部分被定义成API形式,但 ...
- html与jsp
1. 什么是 HTML 语言? HTML文件有什么特征? 答:HTML是超文本标记语言(Hypertext Mark-up Language)的缩写,主要用来创建与系统平台无关的网页文档.它是目前网络 ...
- 2016.8.16 Java培训第一天
1. 十进制转换二进制 31/2=15余1 15/2=7余1 7/2=3余1 3/2=1余1 31的二进制结果为11111 35/2=17余1 17/2=8余1 8/2=4余0 4/2=2 ...