zoukankan      html  css  js  c++  java
  • List 泛型类

    List 泛型类
    注意:此类在 .NET Framework 2.0 版中是新增的。
    表示可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法。
    命名空间:System.Collections.Generic
    程序集:mscorlib(在 mscorlib.dll 中)
    语法:
    C#

    [SerializableAttribute] 
    public class List<T> : IList<T>, ICollection<T>
        IEnumerable
    <T>, IList, ICollection, IEnumerable
    备注备注

    List 类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList 泛型接口。

    List 类既使用相等比较器又使用排序比较器。

    • 诸如 ContainsIndexOfLastIndexOfRemove 这样的方法对列表元素使用相等比较器。类型 T 的默认相等比较器按如下方式确定。如果类型 T 实现 IEquatable 泛型接口,则相等比较器为该接口的 Equals 方法;否则,默认相等比较器为 Object.Equals(Object)

    • 诸如 BinarySearchSort 这样的方法对列表元素使用排序比较器。类型 T 的默认比较器按如下方式确定。如果类型 T 实现 IComparable 泛型接口,则默认比较器为该接口的 CompareTo 方法;否则,如果类型 T 实现非泛型 IComparable 接口,则默认比较器为该接口的 CompareTo 方法。如果类型 T 没有实现其中任一个接口,则不存在默认比较器,并且必须显式提供比较器或比较委托。

    List 不保证是排序的。在执行要求 List 已排序的操作(例如 BinarySearch)之前,您必须对 List 进行排序。

    可使用一个整数索引访问此集合中的元素。此集合中的索引从零开始。

    List 接受 空引用(在 Visual Basic 中为 Nothing) 作为引用类型的有效值并且允许有重复的元素。

    性能注意事项

    在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。

    如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。

    确保用于类型 T 的值类型实现 IEquatable 泛型接口。如果未实现,则诸如 Contains 这样的方法必须调用 Object.Equals(Object) 方法,后者对受影响的列表元素进行装箱。如果值类型实现 IComparable 接口,并且您拥有源代码,则还应实现 IComparable 泛型接口以防止 BinarySearch 和 Sort 方法对列表元素进行装箱。如果您不拥有源代码,则将一个 IComparer 对象传递给 BinarySearch 和 Sort 方法。

    使用 List 类的特定于类型的实现,而不是使用 ArrayList 类或自己编写强类型包装集合,这样是很有好处的。原因是您的实现必须做 .NET Framework 已经为您完成的工作,并且公共语言运行库能够共享 Microsoft 中间语言代码和元素据,这是您的实现所无法做到的。

    示例示例

    下面的代码示例演示 List 泛型类的几个属性和方法。该代码示例使用默认构造函数创建一个容量为 0 的字符串列表。随后显示 Capacity 属性,然后使用 Add 方法添加若干个项。添加的项被列出,Capacity 属性会同 Count 属性一起再次显示,指示已根据需要增加了容量。

    该示例使用 Contains 方法测试该列表中是否存在某个项,使用 Insert 方法在列表的中间插入一个新项,然后再次显示列表的内容。

    默认的 Item 属性(C# 中的索引器)用于检索项,Remove 方法用于移除前面添加的重复项的第一个实例,然后,该示例再次显示内容。Remove 方法总是移除它所遇到的第一个实例。

    该示例使用 TrimExcess 方法减小容量以匹配计数,然后显示 Capacity 和 Count 属性。如果未用容量已经小于总容量的 10%,则列表容量不会进行调整。

    最后,代码示例使用 Clear 方法移除列表中的所有项,并显示 Capacity 和 Count 属性。

    代码实例:

      class Program
        
    {
            
    static void Main(string[] args)
            
    {
                 List
    <string> dinosaurs = new List<string>();

            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]);

            Console.WriteLine(
    "\nRemove(\"Compsognathus\")");
            dinosaurs.Remove(
    "Compsognathus");

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


            dinosaurs.TrimExcess();
            Console.WriteLine(
    "\nTrimExcess()");
            Console.WriteLine(
    "Capacity: {0}", dinosaurs.Capacity);
            Console.WriteLine(
    "Count: {0}", dinosaurs.Count);

            dinosaurs.Clear();
            Console.WriteLine(
    "\nClear()");
            Console.WriteLine(
    "Capacity: {0}", dinosaurs.Capacity);
            Console.WriteLine(
    "Count: {0}", dinosaurs.Count);
        }


            
    /* This code example produces the following output:

    Capacity: 0

    Tyrannosaurus
    Amargasaurus
    Mamenchisaurus
    Deinonychus
    Compsognathus

    Capacity: 8
    Count: 5

    Contains("Deinonychus"): True

    Insert(2, "Compsognathus")

    Tyrannosaurus
    Amargasaurus
    Compsognathus
    Mamenchisaurus
    Deinonychus
    Compsognathus

    dinosaurs[3]: Mamenchisaurus

    Remove("Compsognathus")

    Tyrannosaurus
    Amargasaurus
    Mamenchisaurus
    Deinonychus
    Compsognathus

    TrimExcess()
    Capacity: 5
    Count: 5

    Clear()
    Capacity: 5
    Count: 0
     
    */
  • 相关阅读:
    前缀和
    不用加减乘除做加法
    数组中重复的数字
    滑动窗口的最大值
    矩阵中的路径
    Redis 和 Memcached 的区别 Tair
    机器人的运动范围
    汉诺塔问题
    洗牌算法
    斐波那契查找算法(黄金分割查找算法)
  • 原文地址:https://www.cnblogs.com/abcdwxc/p/960718.html
Copyright © 2011-2022 走看看