集合(Collections)
集合 是存储多个对象的结构。C# 提供了两类集合:
- 
非泛型集合 :如
ArrayList、Hashtable,在 C# 2.0 之前常用,但由于它们使用object类型存储元素,因此需要进行类型转换,可能导致运行时错误和性能损失(装箱和拆箱)。 - 
泛型集合 :如
List<T>、Dictionary<TKey, TValue>,使用泛型类存储数据,提供了类型安全和性能的改进,是 C# 2.0 之后的首选集合类型。 
常见泛型集合
List<T>
List<T> 是最常用的泛型集合,它类似于动态数组,可以存储任意数量的元素。
List<int> numbers = new List<int>(); 
numbers.Add(1); 
numbers.Add(2); 
numbers.Add(3);
 foreach (int number in numbers) 
{ 
    Console.WriteLine(number);
 }
        Dictionary<TKey, TValue>
Dictionary<TKey, TValue> 是一种键值对的集合,允许你根据键来存取值。
特点:
1.键值对存储
2.键唯一性:键(TKey)在字典中唯一且不可重复
3.快速查找
4.无顺序
- 
键的唯一性 和高效查找 是
Dictionary的核心特点。Dictionary<string, int> ages = new Dictionary<string, int>();
ages.Add("Alice", 25);
ages.Add("Bob", 30);
Console.WriteLine(ages["Alice"]); // 输出: 25 
Queue<T>
Queue<T> 是先进先出(FIFO-先进先出数据缓存器)的集合。它用于在你需要按顺序处理对象时使用。
Queue<string> queue = new Queue<string>(); 
queue.Enqueue("First");
queue.Enqueue("Second"); 
queue.Enqueue("Third"); 
Console.WriteLine(queue.Dequeue()); // 输出: First
        Stack<T>
Stack<T> 是后进先出(LIFO)的集合。它用于需要按逆序处理对象时使用。
Stack<string> stack = new Stack<string>(); 
stack.Push("First"); 
stack.Push("Second"); 
stack.Push("Third"); 
Console.WriteLine(stack.Pop()); // 输出: Third
        Queue<T> 和 Stack<T> 的对比
| 特性 | Queue<T> | 
Stack<T> | 
|---|---|---|
| 原则 | 先进先出(FIFO) | 后进先出(LIFO) | 
| 添加元素方法 | Enqueue(T) | 
Push(T) | 
| 移除元素方法 | Dequeue() | 
Pop() | 
| 查看下一个元素 | Peek() | 
Peek() | 
| 适合的场景 | 按顺序处理任务的场景 | 递归、回溯、历史记录管理等场景 | 
泛型集合的优势
- 类型安全:在编译时检查类型,防止无效类型插入集合。
 - 避免装箱/拆箱:在处理值类型时,泛型集合避免了频繁的装箱和拆箱操作,从而提升性能。
 - 更易维护和理解:泛型集合提供了更清晰的代码,容易维护和扩展。