今天是学习C#第16天。。。
所学集合、字典、堆栈。
数组的局限性:
1.数组只能存储相同类型的数据
2.数组不能动态的扩展长度
集合:
集合原本是数学上的一个概念,表示一组具有某种性质的数学元素,引用到程序设计中表示一组具有相同性质的对象。
- 泛型集合类一般位于System.Collections.Generic命名空间,
- 非泛型集合类位于System.Collections命名空间。
- 此外,System.Collections.Specialized命名空间中也包含一些有用的集合类。
集合的类型:
集合可范围两类:泛型集合与非泛型集合
非泛型集合:
动态数组(ArrayList)
堆栈(Stack)
队列(Queue)
哈希表(HashTable)
泛型集合:
动态数组(ArrayList<>)
堆栈(Stack<>)
队列(Queue<>)
字典(Dictionary<Tkey,Tvalue>)※※※
ArrayList
动态数组
动态的增加和减少元素
实现了ICollection和IList和IEnumerable接口
灵活的设置数组的大小
不安全的集合类型
-
其元素为值类型时,效率不高(装箱和拆箱耗性能)
ArrayList numbers = new ArrayList();
ArrayList常用方法与描述:
类 | 描述和用法 |
---|---|
Add() | 将对象添加到ArrayList的结尾处 |
Insert() | 将元素插入ArrayList的指定索引处 |
Remove() | 从ArrayList中移除特定对象的第一个匹配项 |
RemoveAt() | 移除ArrayList的指定索引处的元素 |
Reverse() | 将整个ArrayList当中元素的顺序反转 |
Contains() | 确定某元素是否在ArrayList中 |
Clear() | 从ArrayList中移除所有元素 |
List<T>
泛型动态数组
List类是ArrayList类的泛型等效类
同样实现了IList接口,IEnumrator接口和ICollection
与ArrayList不同的是,声明集合时需要声明集合内部的数据类型,即T的类型.
安全的集合类型
-
某种情况时,在处理值类型时其处理速度比ArrayList快的多
List<int> number=new List<int>(); List<string> str=new List<string>();
List<T>常用方法与描述:
类 | 描述和用法 |
---|---|
Add() | 将对象添加到List<T>的结尾处 |
Insert() | 将元素插入List<T>的指定索引处 |
Remove() | 从List<T>中移除特定对象的第一个匹配项 |
RemoveAt() | 移除List<T>的指定索引处的元素 |
Reverse() | 将整个List<T>当中元素的顺序反转 |
Contains() | 确定某元素是否在List<T>中 |
Clear() | 从List<T>中移除所有元素 |
IndexOf(T) | 搜索指定对象,并返回整个List<T>中第一个匹配项的从0开始的索引 |
Stack(Stack<>)
堆栈
- 后进先出(LIFO)的一种数据结构,本质上堆栈也是一种线性结构
- 线性结构的基本特点:即每个节点有且只有一个前驱结点和一个后续节点
- 随着像Stack中添加元素,容量通过重新分配按需自动增加
- 可以接受null作为有效值
- 允许重复的元素
- 不安全的数据结构
- 其泛型为Stack<T>
Stack常用方法与描述
类 | 描述和用法 |
---|---|
Push() | 将对象插入Stack的顶部.(入栈操作) |
Pop() | 移除并返回Stack顶部的对象.(出栈操作) |
Peek() | 返回位于stack顶部的对象,但不移除. |
Contains() | 确定某元素是否在栈中 |
Clear() | 从statck中移除所有对象 |
Count | 获取栈中包含的元素 |
Queue(Queue<>)
队列
- 先进先出(FIFO)的一种数据结构
- 随着像Queue中添加元素,容量通过重新分配按需自动增加,可以通过TrimToSize来减少容量
- 可以接受null作为有效值
- 允许重复的元素
- 不安全的数据结构
- 其泛型为Queue<T>
- 在A*算法中会用优先级队列处理路径节点
Queue常用方法与描述:
类 | 描述和用法 |
---|---|
Enqueue() | 将对象添加到Queue的结尾处,入队. |
Dequeue() | 移除并返回位于Queue开始处的对象 |
Peek() | 返回位于Queue开始处的对象但不将其移除 |
Contains() | 确定某元素是否在Queue中 |
Clear() | 从Queue中移除所有对象 |
Count | 获取Queue中包含的元素数 |
Dictionary<K,V>
字典
- 处理和表现类似key-value的键值对的集合
- Key和Value的类型由泛型指定
- key值必须唯一,区分大小写
- Value可以是值类型变量,也可以是对象
Dictionary<K,V>常用方法与描述:
类 | 描述和用法 |
---|---|
Add(TKey, TValue) | 将指定的键和值添加到字典中。 |
Clear() | 将所有键和值从 Dictionary<TKey,TValue> 中移除。 |
ContainsKey(TKey) | 确定是否 Dictionary<TKey,TValue> 包含指定键。 |
ContainsValue(TValue) | 确定 Dictionary<TKey,TValue> 是否包含特定值。 |
Remove(TKey) | 将带有指定键的值从 Dictionary<TKey,TValue> 中移除。 |
TryGetValue(TKey, TValue) | 获取与指定的键关联的值。 |
Keys | 获得一个包含 Dictionary<TKey,TValue> 中的键的集合。 |
Values | 获得一个包含 Dictionary<TKey,TValue> 中的值的集合。 |
HashTable
哈希表
- 处理和表现类似key-value的键值对的集合
- Key和Value都是object类型
- key值必须唯一,区分大小写
- Value可以是值类型变量,也可以是对象
HashTable常用方法与描述:
类 | 描述和用法 |
---|---|
Add() | 将指定的键和值添加到哈希表中 |
Clear() | 从 Hashtable 中移除所有的元素。 |
ContainsKey() | 判断 Hashtable 是否包含指定的键。 |
ContainsValue() | 判断 Hashtable 是否包含指定的值。 |
Remove() | 从 Hashtable 中移除带有指定的键的元素。 |
Keys | 获取一个ICollection,包含 Hashtable 中的键。 |
Values | 获取一个ICollection,包含Hashtable中的值 |