集合
可以理解为数据结构,和C++的STL如如出一辙;本质上就是为了程序运行时候的缓存,常用的有几个数据结构
一、ArrayList
ArrayList 代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。
但是,与数组不同的是,ArrayList 可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。
同时 ArrayList 也允许在列表中进行动态内存分配、增加、搜索、排序各项。ArrayList是一个封装的数据操作集合,比数组强大、好用。
1. 构造方法
构造方法 | 作用 |
---|---|
ArrayList() | 创建 ArrayList 的实例,集合的容量是默认初始容量 |
ArrayList(ICollection c) | (拷贝构造函数)创建 ArrayList 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数相同 |
ArrayList(int capacity) | 创建 ArrayList 的实例,并设置其初始容量 |
ArrayList list_1= new ArrayList();
ArrayList list_2= new ArrayList(list_1);
ArrayList list_3= new ArrayList(20);
ArrayList list_4= new ArrayList(){32,4,54,76,8,7,9};
2. 常用的属性和方法
属性或方法 | 作用 |
---|---|
[ ] | 下标索引法 |
int Add(object value) | 向集合中添加 object 类型的元素,返回元素在集合中的下标 |
void AddRange(ICollection c) | 向集合中添加另一个集合 c |
Capacity | 属性,用于获取或设置集合中可以包含的元素个数 |
void Clear() | 从集合中移除所有元素 |
bool Contains(object item) | 判断集合中是否含有 item 元素,若含有该元素则返回 True, 否则返回 False |
void CopyTo(Array array) | 从目标数组 array 的第 0 个位置开始,将整个集合中的元素复制到类型兼容的数组 array 中 |
void CopyTo(Array array,int arraylndex) | 从目标数组 array 的指定索引 arraylndex 处,将整个集合中的元素赋值到类型兼容的数组 array 中 |
void CopyTo(int index,Array array,int arrayIndex,int count) | 从目标数组 array 的指定索引 arrayindex 处,将集合中从指定索引 index 开始的 count 个元素复制到类型兼容的数组 array 中 |
Count | 属性,用于获取集合中实际含有的元素个数 |
int IndexOf(object value) | 返回 value 值在集合中第一次出现的位置 |
int IndexOf(object value,int startIndex) | 返回 value 值在集合的 startindex 位置开始第一次出现的位置 |
int IndexOf(object value,int startIndex,int count) | 返回 value 值在集合的 startindex 位置开始 count 个元素中第一次出现的位置 |
int LastIndexOf(object value) | 返回 value 值在集合中最后一次出现的位置 |
int LastIndexOf(object value,int startIndex) | 返回 value 值在集合的 startindex 位置开始最后一次出现的位置 |
int LastIndexOf(object value,int startIndex,int count) | 返回元素 value值在集合的 startindex 位置开始 count 个元素中最后一次出现的位置 |
void Insert(int index,object value) | 返回 value 向集合中的指定索引 index 处插 |
void InsertRange(int index,ICollection c) | 向集合中的指定索引 index 处插入一个集合 |
void Remove(object obj) | 将指定兀素 obj 从集合中移除 |
void RemoveAt(int index) | 移除集合中指定位置 index 处的元素 |
void RemoveRange(int index,int count) | 移除集合中从指定位置 index 处的 count 个元素 |
void Reverse() | 将集合中的元素顺序反转 |
void Reverse(int index,int count) | 将集合中从指定位置 index 处的 count 个元素反转 |
void Sort() | 将集合中的元素排序,默认从小到大排序 |
void Sort(IComparer comparer) | 将集合中的元素按照比较器 comparer 的方式排序 |
void Sort(int index,int count,IComparer comparer) | 将集合中的元素从指定位置 index 处的 count 个元素按照比较器 comparer 的方式排序 |
void TrimToSize() | 将集合的大小设置为集合中元素的实际个数 |
3. 遍历ArrayList
1. 使用下标
ArrayList list = new ArrayList(){4354,65,7,34,35,7,6};
for(int i = 0; i < list.Count; i++)
{
Console.Write(list[i] + " ");
}
2. 使用foreach
ArrayList list = new ArrayList(){4354,65,7,34,35,7,6};
foreach(int item in list)
{
Console.Write(item + " ");
}
二、Queue
Queue (队列) 是常见的数据结构之一,队列是一种先进先出的结构,即元素从队列尾部插入,从队列的头部移除,类似于日常生活中的站队,先到先得的效果。
1. 构造函数
构造方法 | 作用 |
---|---|
Queue() | 创建 Queue 的实例,集合的容量是默认初始容量 32 个元素,使用默认的增长因子 |
Queue(ICollection col) | 创建 Queue 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数、增长因子相同 |
Queue(int capacity) | 创建 Queue 的实例,并设置其指定的元素个数,默认增长因子 |
Queue(int capacity, float growFactor) | 创建 Queue 的实例,并设置其指定的元素个数和增长因子;增长因子是指当需要扩大容量时,以当前的容量(capacity)值乘以增长因子(growFactor)的值来自动增加容量。 |
例子:
//第 1 中构造器
Queue queueq1 = new Queue();
//第 2 中构造器
Queue queueq2 = new Queue(queue1);
//第 3 中构造器
Queue queueq3 = new Queue(30);
//第 4 中构造器
Queue queueq4 = new Queue(30, 2);
2. 常用方法
属性或方法 | 作用 |
---|---|
Count | 属性,获取 Queue 实例中包含的元素个数 |
void Clear() | 清除 Queue 实例中的元素 |
bool Contains(object obj) | 判断 Queue 实例中是否含有 obj 元素 |
void CopyTo(Array array, int index) | 将 array 数组从指定索引处的元素开始复制到 Queue 实例中 |
object Dequeue() | 移除并返回位于 Queue 实例开始处的对象 |
void Enqueue(object obj) | 将对象添加到 Queue 实例的结尾处 |
object Peek() | 返回位于 Queue 实例开始处的对象但不将其移除 |
object[] ToArray() | 将 Queue 实例中的元素复制到新数组 |
void TrimToSize() | 将容量设置为 Queue 实例中元素的实际数目 |
IEnumerator GetEnumerator() | 返回循环访问 Queue 实例的枚举数 |
三、Stack
栈是一种先进后出的结构,即元素从栈的尾部插入,从栈的尾部移除;函数的执行,压栈出栈都是很常见的。
1. 构造函数
构造方法 | 作用 |
---|---|
Stack() | 使用初始容量创建 Stack 的对象 |
Stack(ICollection col) | 创建 Stack 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数、增长因子相同 |
Stack(int capacity) | 创建 Stack 的实例,并设置其初始容量 |
2. 常用方法
属性或方法 | 作用 |
---|---|
Push(object obj) | 向栈中添加元素,也称入栈 |
object Peek() | 用于获取栈顶元素的值,但不移除栈顶元素的值 |
object Pop() | 用于移除栈顶元素的值,并移除栈顶元素 |
Clear() | 从 Stack 中移除所有的元素 |
Contains(object obj) | 判断某个元素是否在 Stack 中 |
object[] ToArray() | 复制 Stack 到一个新的数组中 |
四、Hashtable
C# 中的 Hashtable 称为哈希表,也称为散列表,在该集合中使用键值对(key/value)的形式存放值。换句话说,在 Hashtable 中存放了两个数组,一个数组用于存放 key 值,一个数组用于存放 value 值。
此外,还提供了根据集合中元素的 key 值查找其对应的 value 值的方法。
最常用的构造方法
Hashtable objectName = new Hashtable();
1. 常用方法&属性
属性或方法 | 作用 |
---|---|
Count | 获取 Hashtable 中包含的键值对个数。 |
IsFixedSize | 获取一个值,表示 Hashtable 是否具有固定大小。 |
IsReadOnly | 获取一个值,表示 Hashtable 是否只读。 |
Item | 获取或设置与指定的键相关的值。 |
Keys | 获取一个 ICollection,包含 Hashtable 中的键。 |
Values | 获取一个 ICollection,包含 Hashtable 中的值。 |
void Add(object key,object value) | 向集合中添加元素 |
void Remove(object key) | 根据指定的 key 值移除对应的集合元素 |
void Clear() | 清空集合 |
ContainsKey (object key) | 判断集合中是否包含指定 key 值的元素 |
ContainsValue(object value) | 判断集合中是否包含指定 value 值的元素 |
五、SortedList
SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。
排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序。
1. 常用方法&属性
属性或方法 | 作用 |
---|---|
Capacity | 获取或设置 SortedList 的容量。 |
Count | 获取 SortedList 中的元素个数。 |
IsFixedSize | 获取一个值,表示 SortedList 是否具有固定大小。 |
IsReadOnly | 获取一个值,表示 SortedList 是否只读。 |
Item | 获取或设置与 SortedList 中指定的键相关的值。 |
Keys | 获取 SortedList 中的键。 |
Values | 获取 SortedList 中的值。 |
Add( object key, object value ) | 向 SortedList 添加一个带有指定的键和值的元素。 |
Clear(); | 从 SortedList 中移除所有的元素。 |
ContainsKey( object key ); | 判断 SortedList 是否包含指定的键。 |
ContainsValue( object value ); | 判断 SortedList 是否包含指定的值。 |
GetByIndex( int index ); | 获取 SortedList 的指定索引处的值。 |
GetKey( int index ); | 获取 SortedList 的指定索引处的键。 |
GetKeyList(); | 获取 SortedList 中的键。 |
GetValueList(); | 获取 SortedList 中的值。 |
IndexOfKey( object key ); | 返回 SortedList 中的指定键的索引,索引从零开始。 |
IndexOfValue( object value ); | 返回 SortedList 中的指定值第一次出现的索引,索引从零开始。 |
Remove( object key ); | 从 SortedList 中移除带有指定的键的元素。 |
RemoveAt( int index ); | 移除 SortedList 的指定索引处的元素。 |
TrimToSize(); | 设置容量为 SortedList 中元素的实际个数。 |