集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list) 和 哈希表(hash table) 的支持。大多数集合类实现了相同的接口集合类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建Object类的对 象的集合。在C#中,Object类是所有数据类型的基类。
常用的集合类
类 | 描述和用法 |
---|---|
动态数组(ArrayList) | 它代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。 |
哈希表(Hasht able) | 它使用键来访问集合中的元素。当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。 |
排序列表(Sorte dList) | 它可以使用键和索引来访问列表中的项。排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问 各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则 它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。 |
堆栈(Stack) | 它代表了一个后进先出的对象集合。当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。 |
队列(Queue) | 它代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。 |
点阵列(BitAr ray) | 它代表了一个使用值1和0来表示的二进制数组。当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。 |
泛型(Generic)
什么是泛型
泛型(Generic)允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说, 泛型允许您编写一个可以与任何数据类型一起工作的类或方法
泛型(Generic)的特性
它有助于您最大限度地重用代码、保护类型的安全以及提高性能。
您可以创建泛型集合类。.NET 框架类库在 System.Collections.Generic命名空间中包含了一些新的泛型集合类。您可以使用这些泛型集合类来替代 System.Collections 中的集合类。
您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
您可以对泛型类进行约束以访问特定数据类型的方法。
关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取
泛型集合常用方法
序号 | 方法名 | 描述 |
---|---|---|
1 | Add() | 给集合的最后面添加一个元素 |
2 | AddRange() | 给集合的最后面再添加一组元素 |
3 | Clear() | 从集合中清除所有元素 |
4 | Contains() | 确定某元素是否在集合中 |
5 | Insert() | 在指定位置插入一个元素 |
6 | Remove() | 从集合中移除指定的元素 |
7 | Removeat() | 从集合中移除指定索引的元素 |
8 | RemoveRange() | 从集合中移除指定范围的元素 |
9 | Reverse() | 将整个集合中的元素反转 |
10 | Sort() | 按照特定的规则对集合中的元素进行排序 |
哈希表(Hashtable)
什么是哈希表
它使用键来访问集合中的元素。当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目
Hashtable类常用的属性
属性 | 描述 |
---|---|
Count | 获取 Hashtable中包含的键值对个数。 |
IsFixedSize | 获取一个值,表示 Hashtable是否具有固定大小。 |
IsReadOnly | 获取一个值,表示Hashtable是否只读。 |
Item | 获取或设置与指定的键相关的值。 |
Keys | 获取一个 ICollection,包含 Hashtable 中的键。 |
Values | 获取一个 ICollection,包含 Hashtable 中的值。 |
Hashtable类常用的方法
序号 | 方法名 | 描述 |
---|---|---|
1 | public virtual void Add( object key, object val ue ); | 向Hashtable添加一个带有指定的键和值的元素。 |
2 | public virtual void Clear(); | 从Hashtable中移除所有的元素。 |
3 | public virtual bool ContainsKey( object key ); | 判断Hashtable是否包含指定的键。 |
4 | public virtual bool ContainsValue( object value ); | 判断Hashtable是否包含指定的值。 |
5 public virtual void Remove( object key ); | 从Hashtable中移除带有指定的键的元素。 |
在给HashTable中添加元素时,必须要保证键值对中提供的键不能重复,这个键可以当成索引来使用,可以通过键获取对应的值,无法通过值获取对应的键
队列(Queue)
什么是队列
它代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队
Queue 类常用的属性
属性 | 描述 |
---|---|
Count | 获取 Queue中包含的元素个数。 |
Queue 类常用的方法
序号 | 方法名 | 描述 |
---|---|---|
1 | public virtual void Clear(); | 从Queue中移除所有的元素。 |
2 | public virtual bool Contains( object obj ); | 判断某个元素是否在Queue中。 |
3 | public virtual object Dequeue(); | 移除并返回在Queue的开头的对象。 |
4 | public virtual void Enqueue( object obj ); | 向Queue的末尾添加一个对象。 |
5 | public virtual object[] ToArray(); | 复制Queue到一个新的数组中 |
6 | public virtual void TrimToSize(); | 设置容量为Queue中元素的实际个数。 |
不能使用for循环遍历,只能用foreach
动态数组(ArrayList)
什么是动态数组
动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增 加、搜索、排序各项。
ArrayList类常用的属性
属性 | 描述 |
---|---|
Capacity | 获取或设置 ArrayList 可以包含的元素个数。 |
Count | 获取 ArrayList 中实际包含的元素个数。 |
IsFixedSize | 获取一个值,表示 ArrayList 是否具有固定大小。 |
IsReadOnly | 获取一个值,表示 ArrayList 是否只读。 |
Item | 获取或设置指定索引处的元素。 |
ArrayList类常用的方法
序号 | 方法名 | 描述 |
---|---|---|
1 | public virtual int Add(object value); | 在ArrayList的末尾添加一个对象。 |
2 | public virtual void AddRange(ICollection c); | 在ArrayList的末尾添加ICollection的元素。 |
3 | public virtual void Clear(); | 从ArrayList中移除所有的元素。 |
4 | public virtual bool Contains(object item); | 判断某个元素是否在ArrayList中。 |
5 | public virtual ArrayList GetRange( intinde x, int count); | 返回一个ArrayList,表示源 ArrayList 中元素的子集。 |
6 | public virtual int IndexOf(object); | 返回某个值在ArrayList中第一次出现的索引, 索引从零开始。 |
7 | public virtual void Insert( int index, objec t value ); | 在ArrayList的指定索引处,插入一个元素。 |
8 | public virtual voidInsertRange(int index,ICollection c ); | 在ArrayList的指定索引处,插入某个集合的元素。 |
9 | public virtual void Remove( object obj ); | 从ArrayList中移除第一次出现的指定对象。 |
10 | public virtual void RemoveAt( int index ); | 移除ArrayList的指定索引处的元素。 |
11 | public virtual voidRemoveRange( int index,int count ); | 从ArrayList中移除某个范围的元素。 |
12 | public virtual void Reverse(); | 逆转ArrayList 中元素的顺序。 |
13 | public virtual void SetRange(int index,ICollection c); | 复制某个集合的元素到ArrayList中某个范围的元素上。 |
14 | public virtual void Sort(); | 对ArrayList中的元素进行排序。 |
15 | public virtual void TrimToSize(); | 设置容量为ArrayList中元素的实际个数。 |
排列列表(SortedList)
SortedList类常用的属性
属性 | 描述 |
---|---|
Capacity | 获取或设置 SortedList 的容量。 |
Count | 获取 SortedList 中的元素个数。 |
IsFixedSize | 获取一个值,表示 SortedList 是否具有固定大小。 |
IsReadOnly | 获取一个值,表示 SortedList 是否只读。 |
Item | 获取或设置与 SortedList 中指定的键相关的值。 |
Keys | 获取 SortedList 中的键。 |
Values | 获取 SortedList 中的值。 |
SortedList类常用的方法
序号 | 方法名 | 描述 |
---|---|---|
1 | public virtualvoid Add( objectkey, objec t value ); | 向SortedList添加一个带有指定的键和值的元素。 |
2 | public virtual void Clear(); | 从SortedList中移除所有的元素。 |
3 | public virtual bool ContainsKey( objectke y ); | 判断SortedList是否包含指定的键。 |
4 | public virtual bool ContainsValue( object value ); | 判断SortedList是否包含指定的值。 |
5 | public virtual object GetByIndex( intinde x ); | 获取SortedList的指定索引处的值。 |
6 | public virtual object GetKey( int index ); | 获取SortedList的指定索引处的键。 |
7 | public virtual IList GetKeyList(); | 获取SortedList中的键。 |
8 | public virtual IList GetValueList(); | 获取SortedList中的值。 |
9 | public virtual int IndexOfKey( object key); | 返回SortedList中的指定键的索引,索引从零开始。 |
10 | public virtual int IndexOfValue( objectva lue ); | 返回SortedList中的指定值第一次出现的索引,索引从零开始。 |
11 | public virtual void Remove( object key ); | 从SortedList中移除带有指定的键的元素。 |
12 | publicvirtual void RemoveAt( int index ); | 移除SortedList的指定索引处的元素。 |
13 | public virtual void TrimToSize(); | 设置容量为SortedList中元素的实际个数。 |
堆栈(Stack)
什么是堆栈
它代表了一个后进先出的对象集合。当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。
Stack 类常用的属性
属性 | 描述 |
---|---|
Count | 获取 Stack 中包含的元素个数。 |
Stack 类常用的方法
描述 | 方法名 | 描述 |
---|---|---|
1 | public virtual void Clear(); | 从Stack中移除所有的元素。 |
2 | public virtual bool Contains( object obj ); | 判断某个元素是否在Stack中。 |
3 | public virtual object Peek(); | 返回在Stack的顶部的对象,但不移除它。 |
4 | public virtual object Pop(); | 移除并返回在Stack的顶部的对象。 |
5 | public virtual void Push( object obj ); | 向Stack的顶部添加一个对象。 |
6 | public virtual object[] ToArray(); | 复制Stack 到一个新的数组中。 |