List<T>是与数组相当的集合类。其他类型的集合:队列、栈、链表和字典。
IEnumerable<T>如果将foreach语句用于集合,就需要IEnumerable接口。这个接口定义了方法GetEnumerator(),它返回一个实现了IEnumerator接口的枚举。
ICollection<T>接口由泛型集合类实现。使用这个接口可以获得集合中的元素个数,把集合复制到数组中,还可以从集合中添加和删除元素。
IList<T>接口用于可通过位置访问其中的元素列表,这个接口定义了一个索引器,可以在集合的指定位置插入或删除某些项。List<T>接口派生自ICollection<T>接口。
IDictionary<TKey,TValue>接口包含键和值的泛型集合类实现。是用这个接口可以访问所有的键和值,使用键类型的索引器可以访问某些项,还可以添加或删除某些项。
IComparer<T>接口由比较器实现,通过Compare()方法给集合中的元素排序
.NET Framework为动态列表提供了泛型类List<T>。这个类实现了IList、ICollection、IEnumerable、IList<T>、ICollection<T>和IEnumerable<T>接口
创建列表 调用默认的构造函数,就可以创建列表对象
Capacity属性可以获取和设置集合的容量
集合初始值设定项给集合赋值
var intList = new List<int>() {1,2}; //添加元素 intList.Add(1);
使用List<T>类的AddRange()方法,可以一次给集合添加多个元素
//插入元素 racers.Insert(3,new Racer(6,"Phil","Hill","USA",3));
方法InsertRange()提供插入大量元素功能
//访问元素 //使用索引器 Racer rr = racers[3]
List<T>集合类实现了IEnumerable接口,所以可以使用foreach语句遍历
List<T>类还提供了ForEach()方法
//删除元素 racers.RemoveAt(3);
搜索 使用的方法IndexOf()、LastIndexOf()、FindIndex()、FindLastIndex()、Find()、FindLast()
排序 List<T>类可以使用Sort()方法对元素排序
只读集合 List<T>集合的AsReadOnly()方法返回ReadOnlyCollection<T>类型对象
队列
以先进先出(FIFO)的方式来处理的集合
System.Collections.Generic名称空间中的泛型类Queue<T>实现
Queue<T>类的方法
Count属性返回队列中的元素个数
Enqueue()方法在队列一端添加一个元素
Dequeue()方法在队列的头部读取和删除一个元素
Peek()方法在队列的头部读取一个元素,但不删除它
TrimExcess()方法重新设置队列的容量
栈
后进先出(LIFO)的容器
Statck<T>类
Count返回栈中的元素个数
Push()在栈顶添加一个元素
Pop()从栈顶删除一个元素,并返回该元素
Peek()返回栈顶的元素,但不删除它
Contains()确定某个元素是否在栈中,如果是,返回true
链表
链表不仅能在列表中存储元素。存储元素时,链表还必须存储每个元素存储下一个元素和上一个元素的信息。
这就是LinkedList<T>包含LinkedListNode<T>类型的元素的原因。
LinkedList<T>类定义的成员可以访问链表中的第一个和最后一个元素(First和Last)、在指定位置插入元素(AddAfter()、AddBefore()、AddFirst()、AddLast()方法)
,删除指定位置的元素(Remove()、RemoveFirst()和RemoveLast()方法)、从链表的开头(Find()方法)或结尾(FindLast()方法)开始搜索元素。
有序列表
如果需要基于键对所需集合排序,就可以使用SortedList<TKey,TValue>类
枚举器返回的元素是KeyValuePair<TKey,TValue>类型
字典
字典表示一种非常复杂的数据结构,这种数据结构允许按照某个键来访问元素。字典也成为映射或散射列表。
字典的主要特性是能根据键快速查找值
主要的类是Dictionary<TKey,TValue>
用作字典中键的类型必须重写Object类的GetHashCode()方法。只要字典类需要确定元素的位置,它就要调用GetHashCode()方法。
Dictionary<TKey,TValue>类支持每个键关联一个值
Lookup<TKey,TElement>类把键映射到一个值集上
有序字典
SortedDictionary<TKey,TValue>类是一个二叉搜索树,其中的元素根据键来排序
SortedList<TKey,TValue>实现基于数组的列表
SortedDictionary<TKey,TValue>类实现为一个字典
SortedList<TKey,TValue>类使用的内存比SortedDictionary<TKey,TValue>类少
SortedDictionary<TKey,TValue>类的元素插入和删除速度比较快
在用已排好序的数据填充集合时,若不需要修改容量,SortedList<TKey,TValue>类就比较快
包含不重复元素的集合称为“集(set)”
HashSet<T>集包含不重复元素的无序列表
SortedSet<T>集包含不重复元素的有序列表
都实现ISet<T>接口
ISet<T>接口提供的方法可以创建合集、交集,或者给出一个集是另一个集的超集或子集的信息。
可观察的集合
如果需要集合中的元素何时删除或添加的信息,就可以使用ObservableCollection<T>类
位组数
如果需要处理的数字有许多位,就可以使用BitArray类和BitVector32结构
并发集合
.NET 4包含的新名称空间System.Collections.Concurrent有几个线程安全的集合类
线程安全的集合可防止多个线程以相互冲突的方式访问集合
为了对集合进行线程安全的访问,定义了IProducerConsumerCollection<T>接口