`
coollifer
  • 浏览: 54062 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

C#泛型类之LIST<T>

    博客分类:
  • C#
 
阅读更多

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.示例程序

 class Program
    {
        static void Main(string[] args)
        {
            #region List<T>类常用的方法
                List<string> dinosaurs = new List<string>();//创建一个string的List集合

                Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);//输出默认容量的大小

                dinosaurs.Add("Tyrannosaurus");//向集合添加元素
                dinosaurs.Add("Amargasaurus");
                dinosaurs.Add("Mamenchisaurus");
                dinosaurs.Add("Deinonychus");
                dinosaurs.Add("Compsognathus");

                Console.WriteLine();
                foreach (string dinosaur in dinosaurs)//打印集合中的元素
                {
                    Console.WriteLine(dinosaur);
                }

                Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);
                Console.WriteLine("Count: {0}", dinosaurs.Count);//输出集合中实际元素的数量

                Console.WriteLine("\nContains(\"Deinonychus\"): {0}",
                    dinosaurs.Contains("Deinonychus"));//判断集合中是否包含某个元素

                Console.WriteLine("\nInsert(2, \"Compsognathus\")");
                dinosaurs.Insert(2, "Compsognathus");//将元素插入到集合的指定索引出,允许插入重复的元素

                Console.WriteLine();
                foreach (string dinosaur in dinosaurs)//打印集合中的元素
                {
                    Console.WriteLine(dinosaur);
                }
                Console.WriteLine("\ndinosaurs[3]: {0}", dinosaurs[3]);//输出集合中索引为3的元素

                Console.WriteLine("\nRemove(\"Compsognathus\")");
                dinosaurs.Remove("Compsognathus");//移除集合中第一个匹配的元素

                Console.WriteLine();
                foreach (string dinosaur in dinosaurs)//打印集合中的元素
                {
                    Console.WriteLine(dinosaur);
                }
                dinosaurs.TrimExcess();//减小容量以匹配计数,然后显示 Capacity 和 Count 属性。如果未用容量已经小于总容量的 10%,则列表容量不会进行调整。
                Console.WriteLine("\nTrimExcess()");
                Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
                Console.WriteLine("Count: {0}", dinosaurs.Count);

                dinosaurs.Clear();//移除列表中的所有项,然后显示 Capacity 和 Count 属性。
                Console.WriteLine("\nClear()");
                Console.WriteLine("Capacity: {0}", dinosaurs.Capacity);
                Console.WriteLine("Count: {0}", dinosaurs.Count);
            
#endregion

            #region List<T>类的新增方法

            List<string> dinosaurs1 = new List<string>();//创建一个string的List集合

            dinosaurs1.Add("Compsognathus");//向集合添加元素
            dinosaurs1.Add("Amargasaurus");
            dinosaurs1.Add("Oviraptor");
            dinosaurs1.Add("Velociraptor");
            dinosaurs1.Add("Deinonychus");
            dinosaurs1.Add("Dilophosaurus");
            dinosaurs1.Add("Gallimimus");
            dinosaurs1.Add("Triceratops");

            Console.WriteLine();
            foreach (string dinosaur in dinosaurs1)
            {
                Console.WriteLine(dinosaur);
            }

            Console.WriteLine("\nTrueForAll(EndsWithSaurus): {0}",
                dinosaurs1.TrueForAll(EndsWithSaurus));//确定集合中的每个元素是否都与指定的谓词所定义的条件相匹配

            Console.WriteLine("\nFind(EndsWithSaurus): {0}",
                dinosaurs1.Find(EndsWithSaurus));//搜索与指定谓词条件相匹配的第一个元素

            Console.WriteLine("\nFindLast(EndsWithSaurus): {0}",
                dinosaurs1.FindLast(EndsWithSaurus));//搜索与指定谓词条件相匹配的最后一个元素

            Console.WriteLine("\nFindAll(EndsWithSaurus):");
            List<string> sublist = dinosaurs1.FindAll(EndsWithSaurus);//检索与指定谓词定义的条件匹配的所有元素

            foreach (string dinosaur in sublist)//打印集合
            {
                Console.WriteLine(dinosaur);
            }

            Console.WriteLine(
                "\n{0} elements removed by RemoveAll(EndsWithSaurus).",
                dinosaurs1.RemoveAll(EndsWithSaurus));//移除与指定谓词定义的条件匹配的所有元素

            Console.WriteLine("\nList now contains:");
            foreach (string dinosaur in dinosaurs1)//打印集合
            {
                Console.WriteLine(dinosaur);
            }

            Console.WriteLine("\nExists(EndsWithSaurus): {0}",
                dinosaurs1.Exists(EndsWithSaurus));//该方法从头开始遍历该列表,依次将每个元素传递给 EndsWithSaurus 方法。如果 EndsWithSaurus 方法针对任何元素返回 true,搜索即停止
            dinosaurs1.Sort();//对集合中的元素排序
            dinosaurs1.Reverse();//将集合中的元素顺序反转
            dinosaurs1.ForEach(Print);//对集合中的每个元素执行指定的方法(如Print方法)
            Console.Read();
            #endregion
        }

        // 搜索谓词方法,该方法接受一个字符串作为参数,并返回一个布尔值,指示输入的字符串是否以“saurus”结尾。
        private static bool EndsWithSaurus(String s)
        {
            if ((s.Length > 5) &&
                (s.Substring(s.Length - 6).ToLower() == "saurus"))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        //定义打印集合的方法
        private static void 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#将DataTable转化为List&lt;T&gt;

    本文给大家讲解的是如何使用C#将DataTable数据源转化为List&lt;T&gt;泛型集合(已知T类型) 的方法和示例,有需要的小伙伴可以参考下

    C#重要知识之——泛型列表List例子

    很多初学C#编程的人可能对泛型列表List的使用不是很清楚,希望这个例子能帮助大家.

    自测试卷5.doc1.简述C#、Java和C++的比较。 2.已知变量x的初值为24,则表达式x+=x--+=x%=17运算的结果值为( )。

    6.成员变量和成员方法前加...9.有一个泛型类class List&lt;T&gt;{},则正确实例化该泛型类的语句是( )。 A)List t=new List(); B)List t=new List&lt;T&gt;; C)List&lt;T&gt; t=new List&lt;T&gt;(); D)List&lt;int&gt; t=new List&lt;int&gt;();

    C#中List和数组之间转换的方法

    List&lt;string&gt; listS=new List&lt;string&gt;(); listS.Add(str); listS.Add(hello); string[] str=listS.ToArray(); 二、数组转List (从string[]转到List&lt;string&gt;) string[] str={str,string,abc}; List&lt;string&gt; listS=...

    C#编程经验技巧宝典

    58&lt;br&gt;&lt;br&gt;0081 文本中首字母改为大写 59&lt;br&gt;&lt;br&gt;0082 C#随机数的产生 59&lt;br&gt;&lt;br&gt;0083 身份证从15位升至18位算法 60&lt;br&gt;&lt;br&gt;0084 十进制数转二进制数的算法 60&lt;br&gt;&lt;br&gt;0085 十进制数转八进制数的算法 61...

    .net 中datatable与list泛型实体对象的互相转换

    非常方便的datatable类型与List&lt;&gt;泛型实体对象集合的互相转换,在面向对象的开发中,经常会用到的,如使用上不懂可以咨询我

    关于C#泛型列表ListT的基本用法总结

    命名空间中的List&lt;T&gt;//using System.Collections; 命名空间中的ArrayList //都实现了列表集合,一个是泛形集合,一个是非泛型的//下面我们将Person对象加到集合中 Person p1 = new Person( “aladdin” , 20 );...

    关于C#泛型列表List&lt;T&gt;的基本用法总结

    本篇文章主要是对C#中泛型列表List&lt;T&gt;的基本用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助

    C# ListT ContainsT()的用法小结

    泛型List&lt;T&gt;中有一个比较列表是否已包含对象的方法Contains&lt;T&gt;(),今天在网上搜了一个用法,记录下来,备查。 要用此方法比较我们的自定义对象,首先要有一个比较器, 要注意的是,这里的比较器是实现...

    C#winform使用泛型集合存储数据使用DataGridView显示和删除数据

    学S2的同学应该会遇到使用泛型集合List&lt;T&gt;存储数据,并在DataGridView里显示数据。

    泛型类(C#实例说明)

    这个泛型类(C#实例说明), 是用例子说明泛型的作用,有注释,大家不明白的话可以来看看

    泛型集合项目练习

    1)使用类的属性和方法创建相关类 2)使用泛型集合Dictionary&lt;K,V&gt;组织对相关数据进行维护 3)使用泛型集合List&lt;T&gt;组织对相关数据进行维护 4)使用写入器打印数据

    C#泛型Dictionary的用法实例详解

    本文以实例形式讲述了C#中的泛型Dictionary的用法。具有很好的实用价值。分享给大家供大家参考。具体如下: 泛型最常见的用途是泛型集合,...List&lt;T&gt; HashTable DIctionary&lt;T&gt; Queue Queue&lt;T&gt; Stack Stack&lt;

    C# ListT的用法小结

    List&lt;T&gt;类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList&lt;T&gt; 泛型接口。泛型的好处: 它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱,或对...

    通用mvc3导出excel 泛型集合数据导出Excel

    columnName = new List&lt;string&gt; 这里是你的字段{"WORKUNIT", "WORKUNITCODE", "POSTNAME", "POSTLEVEL", "TARTTIME", "ENDTIME"}; columnText = new List&lt;string&gt; 这里是你字段对应的文本 {"工作单位", "单位组织...

    C#中将DataTable转化成ListT的方法解析

    通常在DAL层我们都需要把DataTable转换为List&lt;T&gt;让调用者尽可能的好用,尽量的不用关心数据库的字段等,所以我们一般传过去的都是List&lt;T&gt;而不是DataTable。 泛型的好处: 它为使用c#语言编写面向对象程序增加了极大...

    利用Distinct()内置方法对List集合的去重问题详解

    先来看看泛型链表 List&lt;T&gt; 的定义: public class List&lt;T&gt; : IList&lt;T&gt;, ICollection&lt;T&gt;, IList, ICollection, IReadOnlyList&lt;T&gt;, IReadOnlyCollection&lt;T&gt;, IEnumerable&lt;T&gt;, IEnumerable 可见它实

    C# 泛型集合的自定义类型排序的实现

    一、泛型集合List&lt;T&gt;排序 经sort方法之后,采用了升序的方式进行排列的。 List&lt;int&gt; list = new List&lt;int&gt;() { 2, 4, 1, 3, 5, -2, 0, 10 }; Console.Write("排序前..."); foreach (var item in list) { ...

    .NET基础之自定义泛型分析

    在.NET中泛型使用非常频繁,在控制台应用程序中,默认的引入了System.Collection.Generics名称空间,其中就提供了我们经常使用的泛型:List&lt;T&gt;和Dictionary&lt;T&gt;,相信用过它们的都知道它们的强大。还有一种我们经常...

Global site tag (gtag.js) - Google Analytics