当前位置:首页 > C#学习 > 正文内容

泛型List介绍

小道6年前 (2018-09-01)C#学习3715

因为ArrayList存在不安全类型与装箱拆箱的缺点,所以出现了泛型的概念。List类是ArrayList类的泛型等效类,它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。

定义:

List<T>类表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索、排序和操作的方法。

作用:

泛型最常见的用途是泛型集合,我们在创建列表类时,列表项的数据类型可能是int,string或其它类型,如果对列表类的处理方法相同,就没有必要事先指定数据类型,留待列表类实例化时再指定。相当于把数据类型当成参数,这样可以最大限度地重用代码,保护类型的安全以及提高性能。

所属命名空间:System.Collections.Generic     

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

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

泛型的好处: 

它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高。

性能注意事项:

在决定使用IList<T> 还是使用ArrayList类(两者具有类似的功能)时,记住IList<T> 类在大多数情况下执行得更好并且是类型安全的。

如果对IList<T> 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。

 “添加到 ArrayList 中的任何引用或值类型都将隐式地向上强制转换为 Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。”

声明一个泛型List方法:

            List<int> L1 = new List<int>();//声明一个整型泛型list 未赋值
            List<int> L2 = new List<int>() { 1, 2, 3, 4 };//声明一个整型泛型list  并赋值
            int[] i = {9,8,7,6,5,4,3,2,1 };//声明一个整型数组
            List<int> L3 = new List<int>(i);////声明一个整型泛型list 将数组i的值赋给L3
            List<string> L4 = new List<string>();//声明一个字符串泛型list

实例:

        static void Main(string[] args)
        {
            List<int> L1 = new List<int>();//创建一个整型泛型list 未赋值
            L1.Add(10);//添加一个元素到L1中
            int[] i = {20,30,40,50,60,70,80,90,100,110,120,130,140,150 };//声明一个数组,并赋值
            L1.AddRange(i);//添加集合元素到L1中
            L1.Insert(3,888);//在第3个位置插入 888 元素。
            L1.Remove(30);//删除 30 元素。
            L1.RemoveAt(1);//删除第1个位置的元素。
            L1.RemoveRange(4,3);//删除从第4个元素开始的后面3个元素。
            Console.WriteLine("130是否在List中:{0}.", L1.Contains(130));//判断 90 这个元素是否在List中
            //L1.Sort();//使用默认比较器对整个 System.Collections.Generic.List`1 中的元素进行排序。
            //L1.Reverse();//将整个 System.Collections.Generic.List`1 中元素的顺序反转。
            //L1.Clear();//清空所有元素
            Console.WriteLine("List中共有{0}元素.",L1.Count());//获取List中元素的个数,返回int值
            foreach (int o in L1)//遍历List
            {
                Console.WriteLine(o);//输出
            }
            Console.ReadKey();
        }

输出结果:

image.png


(1)List.FindAll方法:检索与指定谓词所定义的条件相匹配的所有元素 (1)List.FindAll方法:检索与指定谓词所定义的条件相匹配的所有元素 

(2)List.Find方法 搜索与指定谓词所定义的条件相匹配的元素,并返回整个List中的第一个匹配元素

(3) List.FindLast方法  public T FindLast(Predicate<T> match);确定是否 List 中的每个元素都与指定的谓词所定义的条件相匹配。用法与List.Find相同。

(4) List.TrueForAll方法:  确定是否 List 中的每个元素都与指定的谓词所定义的条件相匹配。

(5) List.Take(n):  获得前n行 返回值为IEnumetable<T>,T的类型与List<T>的类型一样

(6) List.Where方法:检索与指定谓词所定义的条件相匹配的所有元素。跟List.FindAll方法类似。

(7)List.RemoveAll方法:移除与指定的谓词所定义的条件相匹配的所有元素。


以上部分转载《博客园

扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://www.daobk.com/post/97.html

分享给朋友:

“泛型List介绍” 的相关文章

while语句:输出1~10个数。do...while语句:输出1~10个数。

while语句:输出1~10个数。do...while语句:输出1~10个数。

while语句:输出1~10个数。            int s = 0;//定义一个整型变量     ...

类型转换Cast和Convert

类型转换Cast和Convert

把源类型赋值给目标类型,两个类型不一致的时候会发生类型转换。a=b,b是源,a是目标。隐式转换、显式转换。当目标类型一定能满足源类型转换过去后的要求的话就是隐式转换;如果当目标类型不一定能满足源类型转换过去后的要求的话就需要显式转换(程序员自己负责)。比如:把中国人转换为人是隐式转换,把人转换为中国...

数组:将一个字符串数组输出为|分割的形式

数组:将一个字符串数组输出为|分割的形式

数组:将一个字符串数组输出为|分割的形式,比如“王钢蛋|李铁蛋|铁锤”            string[] s = { "王钢...

函数重名:构成重载的条件:参数类型不同或者参数个数不同(不严谨),与返回值无关。

函数重名:构成重载的条件:参数类型不同或者参数个数不同(不严谨),与返回值无关。

构成重载的条件:参数类型不同或者参数个数不同(不严谨),与返回值无关。        static void Main(string[] args)//默认函数   &...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。