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的用法的更多相关文章

  1. C#中Predicate<T>与Func<T, bool>泛型委托的用法实例

    本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 ...

  2. Java泛型总结---基本用法,类型限定,通配符,类型擦除

    一.基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化.例如在哈希表的存取中,JDK1.5之前使用HashMap的 ...

  3. Java 泛型 四 基本用法与类型擦除

    简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...

  4. 泛型Dictionary的用法详解

    泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的 ...

  5. Java泛型的一点用法(转)

    1.一个优秀的泛型,建议不要这样写public static <K, V> Map<K, V> getMap(String source, String firstSplit, ...

  6. 委托、Action泛型委托、Func泛型委托、Predicate泛型委托的用法

    一.举一委托场景:天气很热,二狗子想去买瓶冰镇可乐,但是二狗子很懒,于是他想找个人代他去,于是要有个代理人. 创建代理人之前先定义委托:public delegate string BuyColaDe ...

  7. fastjson带泛型反序列化的用法

    这个问题之前就遇到了,虽然猜到有现成解决办法,但是一直没有正面解决,今天找到了解决方案,mark一下. 主要就是一个TypeReference的使用. 直接上代码比较容易看懂. 1.泛型 public ...

  8. Java返回类型泛型的用法小结

    Java返回类型泛型的用法小结 版权声明:本文为博主原创文章,未经博主允许不得转载. 关于Java泛型的基本用法就不多说了,主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型D ...

  9. [Effective Java]第五章 泛型

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

随机推荐

  1. zjuoj 3606 Lazy Salesgirl

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3606 Lazy Salesgirl Time Limit: 5 Secon ...

  2. jsp中用EL读取了数据库里面的时间,怎么设置格式显示的格式

    首先导入标签 <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> < ...

  3. ANDROID——仿360手机卫士的旋转打分控件

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简介 灵感源自360手机卫,主要功能就是实现显示评分或等级的效果.并稍微改良了一下,有更好 ...

  4. UBI系统原理分析【转】

    转自:http://blog.chinaunix.net/uid-28236237-id-4164656.html 综述 UBI全称Unsorted Block Images,是一种原始flash设备 ...

  5. Effective_Python mapreduce

    完全吊炸天构造器的写法... import os import threading,time class GenericInputData(object): def read(self): raise ...

  6. windows+caffe(三)——求取图片的均值

    这个要在图片已经转化成lmdb格式下才能求均值... 1.查看caffe根目录下的bin是否存在compute_image_mean.exe(用的happey大神的) 如果没有存在,你需要打开Main ...

  7. objective C 学习之02

    1. 函数 -(void) HelloWorld:(BOOL)ishelloworld{ //干点啥 } 前面带有减号(-) 的方法为实例方法,必须使用类的实例才可以调用的.对应的有+号, 代表是类的 ...

  8. zabbix通过API创建交换机模板,ifAdminStatus;ifOperStatus;ifInUcastPkts;ifAlias

    最终效果: 目的:         通过zabbix的Latest data查看主机就可以看到其监控结果. 监控项:         # 管理状态          IF-MIB::ifAdminSt ...

  9. 【leetcode❤python】 225. Implement Stack using Queues

    #-*- coding: UTF-8 -*-class Stack(object):    def __init__(self):        """        i ...

  10. php : 匿名函数(闭包) [二]

    摘自: http://www.cnblogs.com/yjf512/archive/2012/10/29/2744702.html php的闭包(Closure)也就是匿名函数.是PHP5.3引入的. ...