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

泛型List介绍

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

因为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://daobk.com/post/97.html

分享给朋友:

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

while语句:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。

while语句:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。

while语句:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)。            Console.WriteLine("...

String类常用函数

String类常用函数

String类常用函数ToLower():得到字符串的小写形式。注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。ToUpper():得到字符串的大写形式; Trim()去掉字符串两端的空白。s1.Equals(s2, StringCom...

面向对象版聊天机器人

面向对象版聊天机器人

机器人有不同的名字、维护自己的FullLevel,可以SayHello(我叫***),可以喂食(Eat(int foodCount)),可以对它说话(Speak),对异常情况(错误的喂饭数字,喂的太多撑死了)进行处理,有两个机器人供选择,一开始通过1、2数字选择聊天机器人。  &...

常量

常量

const常量。常量名要大写。一定不会变化的值才能声明为常量。常量一旦声明,下面就不可更改(再赋值)。    class Program     {     &nbs...

发表评论

访客

看不清,换一张

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