1
2
3
4
5
6
7

集合类

发布时间:2018-12-15 12:06   发布人:焦卫峰   浏览次数:590

1.集合类

常常将一组相互关联的对象组成集合(Collections)。集合中的对象称为元素(Element)。

.NET提供了一组功能强大的集合类,包括Array、ArrayList、Stack、Queue、SortedList、Hashtable等等。

除了Array类定义在System 命名空间中外,其他的集合类都定义在System.Collections命名空间中,我们平常所说的数组,其实就是 Array 类。

.NET 专门为集合定义了一套接口,.NET中的集合类都实现了一个或多个接口。

foreach为什么能自动读取下一个元素?原来所有的集合都直接或间接实现了 IEnumerable 接口,IEnumerable 接口中定义了一个方法成员——GetIEnumerator()。

2.Array类

数组是最简单的集合,本质上是 Array 类的对象。

数组有可以根据下标高效地访问数组的元素;但是数组不能动态地增加元素。

Array类常用的两个静态方法:

Sort()方法的功能是把数组排序。

Copy()方法的功能是复制数组,第一个参数是原数组,第二个参数是目标数组,第三个参数表示复制多少个元素。

3.泛型集合类

泛型最常见的用途是定义泛型集合,泛型集合和相对应的非泛型集合功能基本相同,但泛型集合能提供严格的类型检查,具有较强的安全性。此外,如果元素类型为值类型,泛型集合的性能通常优于非泛型集合。泛型集合类定义在 System.Collections.Generic 命名空间中。

4.列表

列表在非泛型集合中用 ArrayList 类实现,在泛型集合中用 List<T>类实现。列表与数组类非常类似,其区别是数组不能改变大小,而列表可以改变大小。

List<string> basketballPlayers = new List<string>(); //默认容量为0

List<string> basketballPlayers = new List<string>(10); //容量为10

创建列表后可以通过 List<T>的 Capacity 属性改变容量(列表所能容纳的元素数目)。

basketballPlayers.Capacity = 10;

下面介绍一下 List<T>类的部分重要方法。

1)Add方法

Add方法用于向列表中添加元素,新元素位于列表的末尾。

2)Remove方法

Remove方法用于删除元素,参数为欲删除的对象。如果删除成功,返回 true;删除不成功或欲删除的对象不存在,返回 false。

3)RemoveAt方法

使用Remove方法时,需要费一定的时间在列表中进行搜索,以便找到匹配的元素。

RemoveAt方法的参数为元素的索引,可以直接删除指定位置上的元素。

4)Insert方法

Insert方法用于在指定位置插入元素。

方法的第一个参数为插入位置,第二个参数为插入对象。

5)RemoveRange方法

RemoveRang方法可以一次从列表中删除多个元素,它的第一个参数表示起始位置,第二个参数表示从该位置起删除几个元素。

6)AddRange方法

AddRange方法用于一次性添加一批元素,它的参数是一个集合(例如一个数组),集合中包含所有要添加的元素。

7)GetRange方法

GetRange方法用于获取列表中指定范围内的元素,它的第一个参数表示起始位置,第二个参数表示从该位置起读取几个元素。

 

List列表可以使用下标(已经存在的元素下标)进行元素的修改,可以使用下标取出某个元素。

5.栈

栈(Stack)是一种非常有用的数据结构。

栈的底部是密封的,只能在栈顶添加或取出元素,最后进入的元素总是最先被取出,因此栈是一种后进先出(Last In First Out, LIFO)的集合类型

栈在非泛型集合中用 Stack 类实现,在泛型集合中用 Stack<T>类实现。

下面介绍一下泛型类 Stack<T>中的重要属性和方法。

1)Push方法

在栈顶添加元素的操作称为压栈,用Push方法实现。

2)Pop方法

从栈顶取出元素的方法称为出栈,用Pop方法实现。

3)Peek方法

Peek方法用来读取栈顶的元素,但不删除。

6.队列

队列(Queue)的元素只能从队头取出,从队尾加入,是一种先进先出(First In First Out, FIFO)的集合类型。

队列在非泛型集合中用 Queue 类实现,在泛型集合中用 Queue <T>类实现,下面介绍一下泛型类 Queue <T>中的重要属性和方法。

1)Enqueue方法

在队尾添加元素称为入队,用 Enqueue方法实现。

2)Dequeue方法

从队头取出元素称为出队,用 Dequeue方法实现,取出的元素会被删除。

3)Peek方法

Queue类也有Peek方法,它用来读取队头的元素,但不删除元素。

7.排序列表

排序列表与列表很相似,区别是排序列表中的每个元素都与一个用于排序的键(Key)关联,元素按键的顺序排列。

在非泛型集合中用SortedList 类实现,在泛型集合中用 SortedList<TKey,TValue>类实现,下面介绍一下泛型类 SortedList<TKey, TValue>中的重要属性和方法。

通过 SortedList<TKey, TValue>类的 Add()方法可以向集合中添加元素,它有两个参数,第一个参数是与元素关联的键,第二个参数是元素的值。

SortedList<TKey, TValue>类的 Count 属性为列表中实际存储的元素个数,Keys 属性为所有键的集合,Values 属性为所有值的集合。

8.字典

散列表(Hashtable)又叫做字典(Dictionary),能够非常快速的添加、删除和查找元素,是检索速度最快的数据结构之一。

散列表中的元素可以是基本类型数据,也可以是非常复杂的包含很多成员变量的对象,这时需要挑选一个合适的成员变量做键(Key),而整个元素则被称为值(Value)。

散列表在非泛型集合类中用Hashtable类实现,在泛型集合类中用 Dictionary<TKey,TValue>类实现,下面介绍泛型类 Dictionary<TKey, TValue>的重要属性和方法。

1)构造函数

Dictionary<TKey, TValue>类重载了7个构造函数,使用该泛型类时需要指明键类型和值类型。

Dictionary<string,Color> colorTable1 = new Dictionary<string,Color>();

2)Add方法

通过Add方法向字典中添加元素,它接受两个参数,第一个参数是与元素关联的键(Key),第二个参数是元素的值(Value)。

3)以Key为索引

字典允许以 Key 为索引,像数组那样使用字典中的元素。

//添加元素

colorTable["Blue"] = new Color("Blue", 0, 0, 255);

//输出元素

Console.WriteLine(colorTable["Blue"]);

4)Keys属性

通过字典的 Keys 属性可以获取字典的所有键。

5)Values属性

通过字典的 Values 属性可以获取字典的所有元素的值。

6)ContainsKey方法

ContainsKey方法用于检验字典中是否包含特定的键。

7)ContainsValue方法

ContainsValue方法用于检验字典中是否包含特定的 Value。

8)Remove方法

通过字典的 Remove方法可以删除与指定的键关联的元素。