泛型List介绍

原创 小道  2018-09-01 00:24:39  阅读 464 次 评论 0 条
摘要:

因为ArrayList存在不安全类型与装箱拆箱的缺点,所以出现了泛型的概念。List类是ArrayList类的泛型等效类,它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。定义:List<T>类表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索、排序和操作的方法。作用:泛型最常见的用途是泛型集合,我们在创建列表类时,列表项的数据类型可能是int,strin

因为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
版权声明:本文为原创文章,版权归 小道 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?