在.NET开发过程中,集合类是处理数据批量存储和操作的常用工具,其体系涵盖了从基础非泛型到泛型、从顺序存储到键值对存储的多种类型,梳理清楚这些类的结构对开发效率提升很有帮助。

集合类的核心命名空间
.NET的集合类主要分布在两个核心命名空间下,不同命名空间下的类有不同的设计目标和适用场景:
- System.Collections:包含非泛型集合类,比如ArrayList、Hashtable等,这类集合存储的是object类型,存在装箱拆箱的性能问题,现在更多用于兼容旧代码。
- System.Collections.Generic:包含泛型集合类,比如List<T>、Dictionary<TKey, TValue>等,指定了元素类型,避免了类型转换和装箱拆箱,是当前开发的首选。
非泛型集合类梳理
非泛型集合类的基类是System.Collections.ICollection,所有非泛型集合都实现了这个接口,下面是最常见的几类:
| 类名 | 特性 | 典型场景 |
|---|---|---|
| ArrayList | 动态数组,长度可自动扩容,存储object类型 | 旧代码中存储未知类型的多个元素 |
| Hashtable | 键值对集合,键和值都是object类型,无序存储 | 旧代码中需要键值映射且类型不固定的场景 |
| Queue | 先进先出的队列集合,存储object类型 | 旧代码中的任务排队处理场景 |
| Stack | 后进先出的栈集合,存储object类型 | 旧代码中的回溯、逆序处理场景 |
泛型集合类梳理
泛型集合类是当前开发的主流选择,其基类是System.Collections.Generic.ICollection<T>,根据存储结构可以分为以下几类:
顺序存储类
- List<T>:动态泛型数组,支持按索引访问,长度自动扩容,是最常用的集合类型之一。
- LinkedList<T>:双向链表,插入和删除中间元素的效率高于List<T>,但不支持按索引快速访问。
- SortedList<TKey, TValue>:有序键值对集合,同时可以通过索引和键访问元素,键需要唯一。
键值对存储类
- Dictionary<TKey, TValue>:哈希表实现的键值对集合,查找、插入、删除效率都很高,键需要唯一。
- SortedDictionary<TKey, TValue>:二叉搜索树实现的键值对集合,元素按照键的顺序排序。
特殊结构类
- Queue<T>:泛型队列,先进先出,适合任务排队、消息处理等场景。
- Stack<T>:泛型栈,后进先出,适合递归回溯、逆序处理等场景。
- HashSet<T>:无序唯一元素集合,查找元素是否存在的时间复杂度是O(1),适合去重场景。
- SortedSet<T>:有序唯一元素集合,元素按照排序规则存储,支持范围查询。
集合接口体系
除了具体集合类,.NET还定义了一系列集合接口,所有集合类都实现了对应的接口,理解了接口就能快速掌握不同集合的通用能力:
IEnumerable:所有集合的基础接口,支持使用foreach遍历元素。IEnumerable<T>:泛型版本的遍历接口,返回指定类型的元素。ICollection:继承IEnumerable,增加了元素计数、同步控制等基础能力。ICollection<T>:泛型版本的ICollection,增加了添加、删除、包含判断等方法。IList:继承ICollection,支持按索引访问、插入、删除元素。IList<T>:泛型版本的IList,指定了索引操作的元素类型。IDictionary:继承ICollection,支持键值对的添加、删除、查找。IDictionary<TKey, TValue>:泛型版本的IDictionary,指定键值对的类型。
简单使用示例
下面是几个常见泛型集合的使用示例,帮助理解不同集合的用法:
// List<T>使用示例,存储字符串列表
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建字符串类型的List
List<string> nameList = new List<string>();
// 添加元素
nameList.Add("张三");
nameList.Add("李四");
nameList.Add("王五");
// 按索引访问元素
string first = nameList[0];
// 遍历元素
foreach (string name in nameList)
{
System.Console.WriteLine(name);
}
}
}// Dictionary<TKey, TValue>使用示例,存储学生成绩
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建键为string,值为int的字典
Dictionary<string, int> scoreDict = new Dictionary<string, int>();
// 添加键值对
scoreDict.Add("张三", 90);
scoreDict.Add("李四", 85);
scoreDict.Add("王五", 95);
// 判断键是否存在并获取值
if (scoreDict.TryGetValue("张三", out int score))
{
System.Console.WriteLine($"张三的成绩是{score}");
}
// 遍历键值对
foreach (var item in scoreDict)
{
System.Console.WriteLine($"{item.Key}的成绩是{item.Value}");
}
}
}梳理完所有集合类的结构后,你可以按照命名空间、接口、具体类的层级关系绘制思维导图,把每个类的特性、适用场景标注在对应节点上,后续开发时遇到集合选择的问题,对照思维导图就能快速找到合适的类型。
.NET框架集合类思维导图System.Collections修改时间:2026-06-02 20:36:26