C#集合类有哪些?

来源:个人站长网作者:澳门程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《C#集合类有哪些?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#集合类有哪些?》有用,将其分享出去将是对创作者最好的鼓励。

C#集合类是.NET框架中用于存储和管理一组对象的重要类型,它们大多位于System.Collections和System.Collections.Generic命名空间下,不同的集合类有着不同的底层实现和适用场景,开发者可以根据实际需求选择合适的类型。

C#集合类有哪些?

C#集合类的分类

C#的集合类可以按照是否支持泛型分为非泛型集合和泛型集合两大类,也可以按照存储结构分为列表类、字典类、集合类、队列栈类等,下面分别介绍常见的集合类型。

非泛型集合类

非泛型集合是.NET早期提供的集合类型,存储在System.Collections命名空间下,它们的元素类型都是object,使用时需要进行装箱和拆箱操作,性能相对较差,现在更推荐使用泛型集合。

  • ArrayList:动态数组,长度可以自动扩容,支持添加、删除、查找元素,但是存储值类型时会有装箱拆箱开销。
  • Hashtable:键值对集合,通过键的哈希值来存储和查找元素,键和值都是object类型,同样存在装箱拆箱问题。
  • Queue:队列,遵循先进先出的原则,常用于需要按顺序处理元素的场景。
  • Stack:栈,遵循后进先出的原则,适合需要回溯操作的场景。

泛型集合类

泛型集合位于System.Collections.Generic命名空间下,在声明时就需要指定元素类型,避免了装箱拆箱操作,类型更安全,性能也更好,是现在开发中的首选。

列表类集合

List<T>是最常用的泛型集合之一,底层是动态数组,支持通过索引快速访问元素,也提供了丰富的增删改查方法。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 声明一个存储int类型的List
        List<int> numberList = new List<int>();
        // 添加元素
        numberList.Add(1);
        numberList.Add(2);
        numberList.Add(3);
        // 通过索引访问元素
        Console.WriteLine(numberList[0]); // 输出1
        // 遍历元素
        foreach (int num in numberList)
        {
            Console.WriteLine(num);
        }
    }
}

LinkedList<T>是双向链表实现的集合,插入和删除中间元素的效率比List<T>高,但是不支持索引访问,查找元素需要遍历整个链表。

字典类集合

Dictionary<TKey, TValue>是泛型键值对集合,通过键的哈希值存储数据,查找、插入、删除元素的时间复杂度接近O(1),键必须唯一。

using System;
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);
        // 通过键获取值
        Console.WriteLine(scoreDict["张三"]); // 输出90
        // 判断键是否存在
        if (scoreDict.ContainsKey("王五"))
        {
            Console.WriteLine("存在王五的成绩");
        }
    }
}

还有SortedDictionary<TKey, TValue>,它会按照键的顺序对元素进行排序,底层是二叉搜索树实现,而SortedList<TKey, TValue>则是通过数组实现的有序键值对集合,两者适用场景略有不同。

集合类(去重场景)

HashSet<T>是哈希集合,元素不能重复,底层是哈希表实现,添加、删除、查找元素的效率都很高,适合需要去重的场景。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        HashSet<int> numSet = new HashSet<int>();
        numSet.Add(1);
        numSet.Add(2);
        numSet.Add(1); // 重复元素不会被添加
        Console.WriteLine(numSet.Count); // 输出2
    }
}

SortedSet<T>则是会自动对元素进行排序的集合,元素同样不能重复。

队列和栈

泛型版本的Queue<T>Stack<T>分别对应非泛型的队列和栈,避免了装箱拆箱,类型更安全。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Queue<string> taskQueue = new Queue<string>();
        taskQueue.Enqueue("任务1");
        taskQueue.Enqueue("任务2");
        Console.WriteLine(taskQueue.Dequeue()); // 输出任务1,遵循先进先出

        Stack<string> historyStack = new Stack<string>();
        historyStack.Push("页面1");
        historyStack.Push("页面2");
        Console.WriteLine(historyStack.Pop()); // 输出页面2,遵循后进先出
    }
}

线程安全集合类

在多线程场景下,普通的集合类不是线程安全的,需要使用System.Collections.Concurrent命名空间下的线程安全集合,比如ConcurrentDictionary<TKey, TValue>ConcurrentQueue<T>ConcurrentStack<T>等,这些集合类内部实现了线程同步机制,可以在多线程环境下安全使用。

如何选择C#集合类

选择集合类时可以参考以下原则:如果需要存储键值对,优先选择Dictionary<TKey, TValue>;如果需要动态数组且经常按索引访问,选择List<T>;如果需要去重选择HashSet<T>;如果需要先进先出处理选择Queue<T>;如果是多线程场景选择对应的线程安全集合;如果不需要泛型特性才考虑非泛型集合。

C#集合类ListDictionaryICollection修改时间:2026-07-13 12:48:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。