当前位置: 首页 > news >正文

51、c# 请列举出6个集合类及用途

在C#中,集合类提供了多种数据结构来存储和操作一组对象。以下是6个常用的集合类及其用途:

1. List< T >

  • 用途:动态数组,用于存储一组有序的对象,支持动态扩容和缩容。

  • 特点:

    • 可以通过索引直接访问元素。
    • 支持添加、删除、插入和查找操作。
    • 适用于需要频繁访问和修改元素的场景。
  • 示例:

List<string> fruits = new List<string> { "Apple", "Banana", "Orange" };
fruits.Add("Grape"); // 添加元素
string firstFruit = fruits[0]; // 通过索引访问

2. Dictionary<TKey, TValue>

  • 用途:键值对集合,用于通过唯一的键快速查找对应的值。
  • 特点:
    • 键必须是唯一的,值可以重复。
    • 查找、添加和删除操作的时间复杂度接近O(1)。
    • 适用于需要快速查找的场景,如缓存、配置存储等。
  • 示例:
Dictionary<int, string> userIds = new Dictionary<int, string>
{{ 1, "Alice" },{ 2, "Bob" }
};
string name = userIds[1]; // 通过键查找

3. HashSet< T >

  • 用途:无序集合,用于存储不重复的元素。
  • 特点:
    • 自动去重,元素唯一。
    • 支持集合操作(如并集、交集、差集)。
    • 适用于需要快速判断元素是否存在的场景。
  • 示例:
HashSet<int> uniqueNumbers = new HashSet<int> { 1, 2, 3, 3, 4 }; // 自动去重
bool containsThree = uniqueNumbers.Contains(3); // 判断是否存在

4. Queue< T >

  • 用途:先进先出(FIFO)队列,用于按顺序处理元素。
  • 特点:
    • 元素按照添加的顺序排列。
    • 支持Enqueue(入队)和Dequeue(出队)操作。
    • 适用于任务调度、消息队列等场景。
  • 示例:
Queue<string> tasks = new Queue<string>();
tasks.Enqueue("Task1");
tasks.Enqueue("Task2");
string nextTask = tasks.Dequeue(); // 获取并移除队首元素

5. Stack< T >

  • 用途:后进先出(LIFO)栈,用于按相反顺序处理元素。
  • 特点:
    • 元素按照添加的逆序排列。
    • 支持Push(压栈)和Pop(弹栈)操作。
    • 适用于撤销操作、表达式求值等场景。
  • 示例:
Stack<char> brackets = new Stack<char>();
brackets.Push('(');
brackets.Push(')');
char topBracket = brackets.Pop(); // 获取并移除栈顶元素

6. LinkedList< T >

  • 用途:双向链表,用于高效地在任意位置插入和删除元素。
  • 特点:
    • 每个节点包含数据和前后节点的引用。
    • 支持在头部、尾部或指定节点后插入/删除元素。
    • 适用于需要频繁在中间位置操作的场景。
  • 示例:
LinkedList<string> cities = new LinkedList<string>();
LinkedListNode<string> newYork = cities.AddLast("New York");
cities.AddAfter(newYork, "Boston"); // 在指定节点后插入

总结

  • List< T > 动态数组,有序存储,适用于频繁访问和修改元素。
  • Dictionary<TKey, TValue>键值对存储,快速查找,适用于需要通过键快速访问值的场景。
  • HashSet< T >存储不重复元素,适用于需要去重或快速判断元素存在的场景。
  • Queue< T >先进先出队列,适用于任务调度、消息队列等。
  • Stack< T >后进先出栈,适用于撤销操作、表达式求值等。
  • LinkedList< T >双向链表,高效插入/删除,适用于需要频繁在中间位置操作的场景。

根据具体需求选择合适的集合类,可以提高代码的效率和可读性。

在这里插入图片描述

http://www.xdnf.cn/news/625717.html

相关文章:

  • VLLM推理可以分配不同显存限制给两张卡吗?
  • MongoDB 备份与恢复策略全面指南:保障数据安全的完整方案
  • springboot中redis的事务的研究
  • 深入理解nvidia container toolkit核心组件与流程
  • 10大Python知识图谱开源项目全解析
  • 【Linux 学习计划】-- Linux调试工具 - gdb cgdb
  • 怎么开发一个网络协议模块(C语言框架)之(二) 数据结构设计
  • RabbitMQ核心特性——重试、TTL、死信队列
  • python项目和依赖管理工具uv简介
  • OpenLayers 加载鼠标位置控件
  • git常用操作命令
  • 用本地大模型解析智能家居语音指令:构建一个离线可用的文本控制助手
  • vitepress | 文档:展示与说明只写一次,使用vitepress-deme-preview插件
  • 力扣HOT100之回溯:46. 全排列
  • juc面试题
  • LumaDot (亮度可调的屏幕圆点)
  • 分布式消息中间件基础
  • 网络协议与通信安全
  • Oracle 19c DG备库报错ORA-00313、ORA-00312、ORA-27037
  • 【Linux仓库】权限的量子纠缠:用户/组/other如何编织Linux访问控制网?
  • el-form 使用el-row el-col对齐 注意事项
  • 从碎片化到集成化:Profibus转Profinet网关引领设备管理数字化转型
  • 【TypeScript】知识点梳理(四)
  • 5月24日day35打卡
  • qiankun解决的问题
  • ABC406E 题解
  • python中Web框架Flask vs FastAPI 对比分析
  • 一个开源的 Blazor 跨平台入门级实战项目
  • 红黑树简单模拟实现
  • 随机森林(Random Forest)学习