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

泛型List介绍

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

因为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介绍” 的相关文章

for语句:用 for实现计算1到100之间所有整数的和。

for语句:用 for实现计算1到100之间所有整数的和。

for语句:用 for实现计算1到100之间所有整数的和。            int i;//定义一个整型变量,未赋值    &nbs...

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

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

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

函数的ref、out参数

函数的ref、out参数

函数参数默认是值传递的,也就是“复制一份”ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。  ...

面向对象概念

面向对象概念

面向对象不是取代面向过程的。类、对象。“人”是类,“张三”是“人”这个类的对象。类是抽象的,对象是具体的。按钮就是类,某个按钮就是对象。对象可以叫做类的实例(Instance)。类就像int,对象就像10。字段Field(和某个对象相关的变量),字段就是类的状态。人这个类有姓名、年龄、身高等字段。类...

发表评论

访客

看不清,换一张

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