1. List<T> (列表)
- 用途: 表示可通过索引访问的对象的有序集合。它是最常用和最灵活的集合类型之一。
- 经典例子: 存储一系列字符串,例如用户输入的姓名列表。
C#
using System;
using System.Collections.Generic;
public class ListExample
{
public static void Main(string[] args)
{
// 创建一个字符串类型的 List
List<string> names = new List<string>();
// 添加元素
names.Add("张三");
names.Add("李四");
names.Add("王五");
// 通过索引访问元素
Console.WriteLine($"第一个姓名: {names[0]}"); // 输出: 第一个姓名: 张三
// 遍历列表
Console.WriteLine("所有姓名:");
foreach (string name in names)
{
Console.WriteLine(name);
}
// 检查列表是否包含某个元素
bool containsLiSi = names.Contains("李四");
Console.WriteLine($"是否包含李四: {containsLiSi}"); // 输出: 是否包含李四: True
}
}
2. Dictionary<TKey, TValue> (字典)
- 用途: 表示键值对的集合。每个键在字典中必须是唯一的,通过键可以快速查找对应的值。
- 经典例子: 存储学生的学号和姓名,通过学号快速查找学生姓名。
C#
using System;
using System.Collections.Generic;
public class DictionaryExample
{
public static void Main(string[] args)
{
// 创建一个将整数(学号)映射到字符串(姓名)的 Dictionary
Dictionary<int, string> studentNames = new Dictionary<int, string>();
// 添加键值对
studentNames.Add(1001, "小明");
studentNames.Add(1002, "小红");
studentNames.Add(1003, "小刚");
// 通过键查找值
if (studentNames.ContainsKey(1002))
{
Console.WriteLine($"学号为 1002 的学生姓名: {studentNames[1002]}"); // 输出: 学号为 1002 的学生姓名: 小红
}
// 遍历字典
Console.WriteLine("所有学生信息:");
foreach (KeyValuePair<int, string> student in studentNames)
{
Console.WriteLine($"学号: {student.Key}, 姓名: {student.Value}");
}
}
}
3. Queue<T> (队列)
- 用途: 表示对象的先进先出 (FIFO) 集合。类似于现实生活中的排队。
- 经典例子: 处理任务队列,例如打印队列或网络请求队列。
C#
using System;
using System.Collections.Generic;
public class QueueExample
{
public static void Main(string[] args)
{
// 创建一个字符串类型的 Queue
Queue<string> tasks = new Queue<string>();
// 入队 (Enqueue)
tasks.Enqueue("任务 A");
tasks.Enqueue("任务 B");
tasks.Enqueue("任务 C");
Console.WriteLine("任务队列:");
// 查看队列头部但不移除 (Peek)
Console.WriteLine($"下一个要处理的任务: {tasks.Peek()}"); // 输出: 下一个要处理的任务: 任务 A
// 出队 (Dequeue) 并处理任务
while (tasks.Count > 0)
{
string currentTask = tasks.Dequeue();
Console.WriteLine($"正在处理任务: {currentTask}");
}
// 输出:
// 正在处理任务: 任务 A
// 正在处理任务: 任务 B
// 正在处理任务: 任务 C
}
}
4. Stack<T> (栈)
- 用途: 表示对象的后进先出 (LIFO) 集合。类似于一叠盘子。
- 经典例子: 实现撤销/重做功能,或者在算法中进行回溯操作。
C#
using System;
using System.Collections.Generic;
public class StackExample
{
public static void Main(string[] args)
{
// 创建一个整数类型的 Stack
Stack<int> numbers = new Stack<int>();
// 入栈 (Push)
numbers.Push(1);
numbers.Push(2);
numbers.Push(3);
Console.WriteLine("栈中的数字:");
// 查看栈顶元素但不移除 (Peek)
Console.WriteLine($"栈顶元素: {numbers.Peek()}"); // 输出: 栈顶元素: 3
// 出栈 (Pop) 并处理
while (numbers.Count > 0)
{
int currentNumber = numbers.Pop();
Console.WriteLine($"弹出元素: {currentNumber}");
}
// 输出:
// 弹出元素: 3
// 弹出元素: 2
// 弹出元素: 1
}
}
5. HashSet<T> (哈希集合)
- 用途: 表示唯一元素的集合。它不保证元素的顺序,并且提供了高效的元素查找、添加和删除操作。
- 经典例子: 存储一组唯一的标签或关键词,用于去重或快速检查某个元素是否存在。
C#
using System;
using System.Collections.Generic;
public class HashSetExample
{
public static void Main(string[] args)
{
// 创建一个字符串类型的 HashSet
HashSet<string> tags = new HashSet<string>();
// 添加元素
tags.Add("C#");
tags.Add(".NET");
tags.Add("集合");
tags.Add("C#"); // 重复添加,HashSet 会自动忽略
Console.WriteLine("唯一的标签:");
foreach (string tag in tags)
{
Console.WriteLine(tag);
}
// 输出 (顺序可能不同):
// C#
// .NET
// 集合
// 检查集合是否包含某个元素
bool containsNET = tags.Contains(".NET");
Console.WriteLine($"是否包含 .NET 标签: {containsNET}"); // 输出: 是否包含 .NET 标签: True
}
}