.NET Framework为动态列表提供了泛型类List<T>。这个类实现了IList、ICollection、
IEnumerable、IList<T>、ICollection<T> 和IEnumerable<T>接口。
创建列表
调用默认的构造函数,就可以创建列表对象。在泛型类List<T>中,必须为声明为列表的值指
定类型.ArrayList是一个非泛型列表,它可以将任意0bject类型作为其元素。
使用默认的构造函数创建一个空列表。元素添加到列表中后,列表的容量就会扩大为可接纳4
个元素。如果添加了第5个元素,列表的大小就重新设置为包含8个元素。如果8个元素还不够,
列表的大小就重新设置为包含16个元素。每次都会将列表的容量重新设置为原来的2倍。
var intList = neW List<int>();
如果列表的容量改变了,整个集合就要重新分配到一个新的内存块中。在Lis<T>泛型类的实
现代码中,使用了一个T类型的数组。通过重新分配内存,创建一个新数组,Array.Copy()方法将旧
数组中的元素复制到新数组中。为节省时间,如果事先知道列表中元素的个数,就可以用构造函数
定义其容量.
List<int> intList = new List<int>(10);
使用Capacity属性可以获取和设置集合的容量。
intList.Capacity=20;如果已经将元素添加到列表中,且不希望添加更多的元素,就可以调用TrimExcess()方法,去除不需要的容量。但是,因为重新定位需要时间,所以如果元素个数超过了容量的90%,TrimExcess()方法就什么也不做。
intList.TrimExcess();
集合初始值设定项
还可以使用集合初始值设定项给集合赋值。
var intList = new List<int>(){1,2};
var stringList = new List<string>() {"one", "two"};
添加元素
使用Add()方法可以给列表添加元素,如下所示。实例化的泛型类型定义了Add()方法的参数
类型:
var intList = neW List<int>();
intList.Add(1);
intList.Add(2);
Var stringList = new List<string>();
stringList.Add("one");
stringList.Add("two");
使用List<T>类的AddRange()方法,可以一次给集合添加多个元素。因为AddRange()方法的参
数是IEnumerable<T>型的对象。
插入元素
使用Insert()方法可以在指定位置插入元素。
访问元素
实现了IList和IList<T>接口的所有类都提供了一个索引器,所以可以使用索引器,方法是通过
传送元素号来访问元素。第一个元素可以用索引值0来访问。指定intList[3],可以访问列表中的第
4个元素。
删除元素
删除元素时,可以利用索引,也可以传递要删除的元素。下面的代码通过把3传递给RemoveAt()
方法,删除第4个元素:
intList.RemoveAt(3);
RemoveRange()方法可以从集合中删除许多元素。它的第一个参数指定了开始删除的元素索引,
第二个参数指定了要删除的元素个数。
搜索有不同的方式在集合中搜索元素。可以获得要查找的元素的索引,或者搜索元素本身。可以使用的方法有Indexof()、LastIndexof()、FindIndex()、FindLastIndex()、FindLast()。如果只检查元素是否存在,List<T>就提供了Exists()方法。
排序
List<T>可以使用sort()方法对元素排序。sort()方法使用快速排序算法,比较所有的元素,直
到整个列表排好序为止。
类型转换
使用List<T>类的ConvertAll<TOutpuo>()方法,可以把所有类型的集合转换为另一种类型。
只读集合创建集合后,它们就是可读写的。当然,集合必须是可读写的,否则就不能给它们填充值了。但是,在填充完集合后,可以创建只读集合。酵合的AsReadOnly()方法返回ReadOnlyCollection<T>类型的对象。ReadOnlyCollection<T>实现的接口与峥合相同,但所有修改集合的方法和属性都抛出NotsuppotedException异常。