首页 > 代码库 > C#学习笔记 ----集合

C#学习笔记 ----集合

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>接口

C#学习笔记 ----集合