泛型List介绍
因为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(); }
输出结果:
(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方法:移除与指定的谓词所定义的条件相匹配的所有元素。
以上部分转载《博客园》