`
coollifer
  • 浏览: 55635 次
  • 性别: 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#重要知识之——泛型列表List例子

    在C#编程中,泛型列表`List&lt;T&gt;`是一个非常重要的数据结构,它为我们提供了动态数组的功能,并且具有类型安全的特性。这篇文章将深入探讨`List&lt;T&gt;`的使用,包括其基本操作、性能特点以及一些高级用法。 一、基础概念...

    c# List类排序方法

    在C#中,`List&lt;T&gt;`是一个非常常用的泛型集合类,它提供了动态数组的功能,可以存储任意数量的相同类型元素。当涉及到对List中的数据进行排序时,我们可以采用多种不同的策略和技术。本篇文章将详细介绍`List&lt;T&gt;`的...

    C# 解析json格式数据为IList

    总之,C#通过Json.NET库提供了强大的JSON解析功能,可以方便地将JSON数据转换为IList&lt;T&gt;类型,无论T是简单的基础类型还是复杂的自定义类。理解这个过程对于处理现代Web应用中的数据交换至关重要。

    C# xmlToList xml转换成对象

    首先,我们需要理解`List&lt;T&gt;`是C#中的一个泛型集合类,它继承自`Collection&lt;T&gt;`,可以存储同一类型的元素列表。`T`代表你想要存储的对象类型,例如`List&lt;int&gt;`表示存储整数的列表,`List&lt;string&gt;`则表示字符串列表。...

    C#+List+GridControl实现主从表嵌套

    `List&lt;T&gt;`是.NET Framework中`System.Collections.Generic`命名空间下的一个泛型集合类,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口。`List&lt;T&gt;`是用于存储强类型对象的动态数组,允许快速的插入和...

    arraylist 和 list<T> 效率对比

    相比之下,List&lt;T&gt;是C# 2.0引入的泛型集合,它实现了IList&lt;T&gt;接口,提供类型安全的数据存储。由于List&lt;T&gt;知道它将存储哪种类型的数据,因此无需进行显式的类型转换,这极大地提高了代码的可读性和安全性。List&lt;T&gt;...

    C#List<T>的应用记录

    描述:本文档详细探讨了C#中泛型集合List&lt;T&gt;的使用,特别是其引用特性和如何通过索引访问及修改元素。此外,还深入分析了当List&lt;T&gt;的元素作为方法参数时的行为,并提供了一个具体的代码示例来演示这些概念。 知识点...

    Json与实体相互转换,支持IList泛型

    Json转换为实体;Json转换为IList&lt;T&gt;;实体转换为Json;IList&lt;T&gt;转换为Json;

    C# List用法

    C# List&lt;T&gt;是.NET Framework中System.Collections.Generic命名空间下的一个泛型类,它是对非泛型ArrayList类的泛型等效版本,适用于处理强类型集合。List&lt;T&gt;使用动态数组的方式实现,允许元素数量按需动态增加,相比...

    C#中的集合示例(Array,ArrayList,Hashtable,List)

    List&lt;T&gt;是泛型集合,它是System.Collections.Generic命名空间下的一个类。与ArrayList相比,List&lt;T&gt;更加安全,因为它在编译时就知道了元素的类型。以下是一个List&lt;int&gt;的示例: ```csharp List&lt;int&gt; numbersList = ...

    C#将DataTable转化为List&lt;T&gt;

    在C#开发中,将DataTable转换为List&lt;T&gt;泛型集合是一个常见的需求,特别是在使用三层架构进行网站开发时,我们可能会从数据访问层获取一个DataTable对象,然后需要将其转换为一个强类型的List&lt;T&gt;集合以便在业务逻辑层...

    C#泛型集合使用实例

    `List&lt;T&gt;`是最常用的泛型集合之一,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口。可以使用`Add`方法添加元素,`Remove`方法删除元素,以及`Find`方法查找满足条件的元素。通过索引访问元素,如同...

    浅谈c# 泛型类的应用

    例如,`List&lt;T&gt;`就是一个泛型类,它可以用来存储任何类型的对象,如整数、字符串或自定义类。泛型类使得开发者能够在不牺牲性能的情况下,实现类型安全的数据容器。 2. **泛型类的继承** - **继承具体类**:泛型类...

    精华志 C#_List_<T>+Find+Exists+FindAll+Sort用法+范例

    `List&lt;T&gt;`是泛型类,它继承自`Collection&lt;T&gt;`,实现了`IList&lt;T&gt;`接口,用于存储固定数量的同类型元素。`T`代表你想要存储的对象类型,例如,`List&lt;int&gt;`用于存储整数,`List&lt;string&gt;`用于存储字符串。 1. **Find...

    C# ListT ContainsT()的用法小结

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

    C# 泛型集合 C#初学者的一个适用案例

    在C#中,泛型集合如List&lt;T&gt;、Dictionary&lt;TKey, TValue&gt;等就是泛型的应用实例。 接下来,我们来看一下C#中最常用的泛型集合——List&lt;T&gt;。List&lt;T&gt;是一个动态大小的数组,可以容纳相同类型的元素。例如,我们可以声明...

    C#List字典Dictionary泛型集合实例,源码

    首先,`List&lt;T&gt;`是.NET中最基本的动态数组,它实现了`IList&lt;T&gt;`, `ICollection&lt;T&gt;`, `IEnumerable&lt;T&gt;`等多个接口。`List&lt;T&gt;`提供了添加、删除、查找、排序等多种操作,适用于需要按顺序访问数据的场景。例如,你可以...

    c#使用 和 继承 泛型类

    在实际项目中,如.NET框架的`System.Collections.Generic`命名空间中的`List&lt;T&gt;`、`Dictionary&lt;TKey, TValue&gt;`等都是泛型类的实例,展示了泛型的强大功能。 总的来说,C#中的泛型类和继承机制相结合,为开发者提供...

    C#泛型C#泛型C#泛型

    这个声明定义了一个泛型类 List&lt;T&gt;,其中 T 是一个类型参数。这个泛型类可以实例化为不同的类型,例如 List&lt;int&gt;、List&lt;string&gt; 等。 2. 类型参数 类型参数是一个简单的标识符,它指示了用来创建一个构造类型的...

Global site tag (gtag.js) - Google Analytics