在 C# 中,常用的集合类位于 System.Collections 和
System.Collections.Generic 命名空间中,分为 非泛型集合 和 泛型集合 两类。以下是常用集合类及其特点的介绍:
1. 非泛型集合类
非泛型集合可以存储任何类型的对象,但需要进行装箱和拆箱操作,效率相对较低。主要类位于 System.Collections 命名空间。
ArrayList
- 特点:动态数组,容量可以自动增长。存储对象类型,可存储不同类型的元素。需要装箱和拆箱操作。
- 使用场景:适用于存储少量动态数据,且对性能要求不高的场景。
- 示例:ArrayList list = new ArrayList(); list.Add(1); list.Add("hello"); list.Add(3.14);
Hashtable
- 特点:基于键值对存储数据。无序存储,快速查找。键和值都可以是任意对象类型。
- 使用场景:适用于非泛型的键值对存储和查找。
- 示例:Hashtable hashtable = new Hashtable(); hashtable.Add("key1", "value1"); hashtable.Add(2, 100);
Queue
- 特点:先进先出(FIFO)结构。提供 Enqueue(入队)和 Dequeue(出队)方法。
- 使用场景:任务调度或队列管理。
- 示例:Queue queue = new Queue(); queue.Enqueue("task1"); queue.Enqueue("task2"); queue.Dequeue();
Stack
- 特点:后进先出(LIFO)结构。提供 Push(压栈)和 Pop(弹栈)方法。
- 使用场景:适用于深度优先搜索、表达式求值等场景。
- 示例:Stack stack = new Stack(); stack.Push(1); stack.Push(2); stack.Pop();
2. 泛型集合类
泛型集合位于
System.Collections.Generic 命名空间中,可以避免装箱和拆箱操作,性能更高且类型安全。
List
- 特点:泛型动态数组,容量自动增长。支持快速索引访问。类型安全。
- 使用场景:存储同类型的动态数据。
- 示例:List
numbers = new List { 1, 2, 3 }; numbers.Add(4); Console.WriteLine(numbers[0]);
Dictionary
- 特点:泛型键值对集合。提供高效的查找和添加操作。键是唯一的,值可以重复。
- 使用场景:需要快速查找或存储键值对数据。
- 示例:Dictionary
scores = new Dictionary { { "Alice", 90 }, { "Bob", 85 } }; Console.WriteLine(scores["Alice"]);
Queue
- 特点:泛型先进先出(FIFO)队列。提供类型安全的队列操作。
- 使用场景:同 Queue 类,适用于需要类型安全的场景。
- 示例:Queue
tasks = new Queue (); tasks.Enqueue("task1"); tasks.Enqueue("task2"); tasks.Dequeue();
Stack
- 特点:泛型后进先出(LIFO)堆栈。提供类型安全的堆栈操作。
- 使用场景:同 Stack 类,适用于需要类型安全的场景。
- 示例:Stack
stack = new Stack (); stack.Push(1); stack.Push(2); stack.Pop();
HashSet
- 特点:存储唯一的元素,内部无序。提供高效的插入和查找操作。不允许重复元素。
- 使用场景:集合去重或需要快速查找的场景。
- 示例:HashSet
set = new HashSet { 1, 2, 3 }; set.Add(2); // 不会添加重复值
SortedDictionary
- 特点:键值对集合,按键排序。提供与 Dictionary 类似的功能,但存储有序。
- 使用场景:需要键值对存储且要求按键排序的场景。
- 示例:SortedDictionary
sortedDict = new SortedDictionary { { "Bob", 85 }, { "Alice", 90 } };
SortedSet
- 特点:存储唯一元素,内部有序。提供基于二叉搜索树的排序和查找。
- 使用场景:需要有序的去重集合。
- 示例:SortedSet
sortedSet = new SortedSet { 3, 1, 2 };
总结
集合类 | 特点 | 适用场景 |
ArrayList | 非泛型动态数组,需要装箱/拆箱 | 低性能要求的动态数据存储 |
Hashtable | 键值对,无序存储,非泛型 | 快速查找键值对 |
List | 泛型动态数组,类型安全 | 动态数据存储,随机访问 |
Dictionary | 泛型键值对集合,快速查找 | 键值对存储,需类型安全 |
Queue/Queue | FIFO 队列 | 任务调度、队列管理 |
Stack/Stack | LIFO 堆栈 | 表达式求值、深度优先搜索 |
HashSet | 无序唯一集合 | 去重操作,快速查找 |
SortedDictionary | 按键排序的键值对集合 | 有序存储的键值对 |
SortedSet | 有序唯一集合 | 有序去重集合 |
选择集合类时,应根据具体场景、性能要求和数据特性决定。
本文暂时没有评论,来添加一个吧(●'◡'●)