C# 集合(Collection)学习笔记
一、集合概述
集合,是C#语言中最常用的一种数据结构,它是一组对象的容器,可以存储和操作多个对象。在C#中,集合包括泛型集合和非泛型集合两种类型。
泛型集合是指使用泛型类型定义的集合类,提供了更好的类型安全性和代码重用性。而非泛型集合则是指没有使用泛型类型定义的集合类,可以存储任何类型的对象。
二、集合分类
C#中的集合主要分为以下几类:
-
List<T>:可变大小的列表,可以按照索引访问。
-
Dictionary<TKey, TValue>:键值对集合,提供通过键快速查找值的能力。
-
Queue<T>:先进先出(FIFO)队列,支持在队列末尾添加元素,在队列头部删除元素。
-
Stack<T>:后进先出(LIFO)栈,支持在栈顶添加元素,在栈顶删除元素。
-
HashSet<T>:无序不重复元素集合,可以快速查找集合中是否存在某个元素。
-
SortedDictionary<TKey, TValue>:键值对集合,按照键进行排序。
-
SortedSet<T>:有序不重复元素集合,按照元素进行排序。
三、集合实例
1. List<T>
csharpCopy CodeList<string> names = new List<string>();
// 添加元素到列表末尾
names.Add("Tom");
names.Add("Jerry");
names.Add("Mike");
// 遍历列表元素并输出
foreach (string name in names)
{
Console.WriteLine(name);
}
// 在指定位置插入元素
names.Insert(2, "Kate");
// 删除指定元素
names.Remove("Tom");
// 判断列表中是否包含指定元素
if (names.Contains("Jerry"))
{
Console.WriteLine("Jerry exists in the list.");
}
2. Dictionary<TKey, TValue>
csharpCopy CodeDictionary<string, int> scores = new Dictionary<string, int>();
// 添加键值对
scores.Add("Tom", 90);
scores.Add("Jerry", 85);
scores.Add("Mike", 95);
// 访问字典中的值
int score = scores["Tom"];
// 遍历字典中的键值对并输出
foreach (KeyValuePair<string, int> kvp in scores)
{
Console.WriteLine("Name: {0}, Score: {1}", kvp.Key, kvp.Value);
}
// 判断字典中是否包含指定键
if (scores.ContainsKey("Jerry"))
{
Console.WriteLine("Jerry's score is {0}", scores["Jerry"]);
}
3. Queue<T>
csharpCopy CodeQueue<int> numbers = new Queue<int>();
// 添加元素到队列末尾
numbers.Enqueue(1);
numbers.Enqueue(2);
numbers.Enqueue(3);
// 访问队列头部元素
int head = numbers.Peek();
// 遍历队列并输出
foreach (int number in numbers)
{
Console.WriteLine(number);
}
// 删除队列头部元素
int removed = numbers.Dequeue();
4. Stack<T>
csharpCopy CodeStack<int> numbers = new Stack<int>();
// 添加元素到栈顶
numbers.Push(1);
numbers.Push(2);
numbers.Push(3);
// 访问栈顶元素
int top = numbers.Peek();
// 遍历栈并输出
foreach (int number in numbers)
{
Console.WriteLine(number);
}
// 删除栈顶元素
int popped = numbers.Pop();
5. HashSet<T>
csharpCopy CodeHashSet<string> names = new HashSet<string>();
// 添加元素到集合中
names.Add("Tom");
names.Add("Jerry");
names.Add("Mike");
// 遍历集合并输出
foreach (string name in names)
{
Console.WriteLine(name);
}
// 判断集合中是否包含指定元素
if (names.Contains("Jerry"))
{
Console.WriteLine("Jerry exists in the set.");
}
6. SortedDictionary<TKey, TValue>
csharpCopy CodeSortedDictionary<string, int> scores = new SortedDictionary<string, int>();
// 添加键值对到字典中
scores.Add("Tom", 90);
scores.Add("Jerry", 85);
scores.Add("Mike", 95);
// 访问字典中的值
int score = scores["Tom"];
// 遍历字典并输出
foreach (KeyValuePair<string, int> kvp in scores)
{
Console.WriteLine("Name: {0}, Score: {1}", kvp.Key, kvp.Value);
}
// 判断字典中是否包含指定键
if (scores.ContainsKey("Jerry"))
{
Console.WriteLine("Jerry's score is {0}", scores["Jerry"]);
}
7. SortedSet<T>
csharpCopy CodeSortedSet<int> numbers = new SortedSet<int>();
// 添加元素到集合中
numbers.Add(3);
numbers.Add(1);
numbers.Add(2);
// 遍历集合并输出
foreach (int number in numbers)
{
Console.WriteLine(number);
}
// 判断集合中是否包含指定元素
if (numbers.Contains(2))
{
Console.WriteLine("2 exists in the set.");
}
四、总结
C#集合是一种重要的数据结构,在实际开发中经常被使用。掌握各种类型的集合的特点和用法,能够更加高效地处理数据,提高开发效率。