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,并以超链接形式标明文章原始出处,否则将 ...
 
随机推荐
- Eclipse中使用自己封装的jar包的过程
			
在包名上右键,选择Export"" 经过上面的步骤,成功导出了可运行jar包,下面在另一个自己的工程里引入这个jar包 最终效果如下:可见包已经可以正常使用了!! 运行自己的jar ...
 - AJAX-----03远古时期的ajax
			
用iframe方法实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
 - JetBrains WebStorm 安装破解问题
			
1.选择用户名验证码注册,进入地址:http://15.idea.lanyus.com/ 然后输入用户名,提交便会生成验证码,注册成功, 2.选择License server,输入以下地址: http ...
 - 数据库的Index Scan V.S. Rscan
			
一直在做performance,但直到今天才完成了这个第一天应该完成的图,到底Index scan和Rscan的分界点在哪里? 如下图所示,很简单的一个查询,只是查询int,分别强制走索引和表扫描 ...
 - dr.wondr博士随笔之三星某古董智能机GTXXXX 的取证恢复一例
			
大家好!欢迎来到我dr.wonde博士的微博! 这是dr.wonde的第一篇微博,不足之处,还请见谅. 今天dr.wonde给你们带来不可能的数据恢复任务之三星非智能机古董机GT-E1088C 的恢复 ...
 - Git入门教程
			
参考文献: 1. Pro Git 2. Git教程 3. Git教程 4. 图解Git
 - YTU 3023: 树的遍历
			
原文链接:https://www.dreamwings.cn/ytu3023/2617.html 3023: 树的遍历 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 2 题 ...
 - Robotlegs框架1.5简介
			
该框架的1.5版本位于https://github.com/robotlegs/robotlegs-framework/tree/version1,现在已经出了重新架构的2.0版本,所以我决定先研究已 ...
 - noi 4977 怪盗基德的滑翔翼
			
题目链接: http://noi.openjudge.cn/ch0206/4977/ LIS http://paste.ubuntu.com/23406594/
 - OpenCV 绘制图像直方图
			
OpenCV绘制图像直方图,版本2.4.11 直方图可展示图像中的像素分布,是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数.可以借助观察该直方图了解需要如何调整亮度分布.这种直方 ...