C#中除了Dictionary,List,HashSet,HashTable 还有哪些可以保存列表的数据类型?

在 C# 中,除了 DictionaryListHashSetHashtable 之外,还有许多其他可以保存列表或集合类型的数据结构,具体包括以下几类:


📌 数组类

1. Array(数组)

  • 固定长度,性能高,适用于已知大小的数据集。
  • 适合频繁访问但不需要修改大小的场景。
 

csharp

int[] arr = new int[5] { 1, 2, 3, 4, 5 };

📌 列表类

2. Queue<T>(队列)

  • 先进先出(FIFO)结构。
  • 适用于按顺序处理任务的场景。
 

csharp

Queue<int> queue = new Queue<int>(); queue.Enqueue(1); int item = queue.Dequeue(); // 取出第一个元素

3. Stack<T>(栈)

  • 后进先出(LIFO)结构。
  • 适用于逆序或撤销操作的场景。
 

csharp

Stack<int> stack = new Stack<int>(); stack.Push(1); int item = stack.Pop(); // 取出最后一个元素

4. LinkedList<T>(链表)

  • 双向链表,支持在头尾或中间快速插入和删除操作。
  • 适用于频繁插入和删除的场景。
 

csharp

LinkedList<int> list = new LinkedList<int>(); list.AddFirst(1); list.AddLast(2);

📌 集合类

5. SortedSet<T>(有序集合)

  • 保证元素唯一性,并且自动按升序排序。
 

csharp

SortedSet<int> set = new SortedSet<int>(); set.Add(3); set.Add(1); set.Add(2); // 结果:1, 2, 3(自动排序)

6. ConcurrentBag<T>(线程安全集合)

  • 允许并发访问的集合,适用于多线程场景。
 

csharp

ConcurrentBag<int> bag = new ConcurrentBag<int>(); bag.Add(1); bag.Add(2);

7. BlockingCollection<T>(阻塞集合)

  • 提供线程安全的生产者/消费者模式。
 

csharp

BlockingCollection<int> collection = new BlockingCollection<int>(); collection.Add(1); int item = collection.Take(); // 阻塞直到有数据

8. ObservableCollection<T>(可观察集合)

  • 当集合发生变化时会触发通知(通常用于数据绑定)。
 

csharp

ObservableCollection<int> observableList = new ObservableCollection<int>();
observableList.CollectionChanged += (sender, e) => 
{ Console.WriteLine("Collection changed"); 
}; 
observableList.Add(1);

📌 映射类

9. SortedDictionary<TKey, TValue>(有序字典)

  • 按键的升序排序,基于 Red-Black Tree 实现。
 

csharp

SortedDictionary<int, string> dict = new SortedDictionary<int, string>(); 
dict.Add(2, "B"); 
dict.Add(1, "A"); 
dict.Add(3, "C"); // 输出顺序为:1 -> 2 -> 3

10. SortedList<TKey, TValue>(有序列表)

  • 基于数组,按键排序,插入和删除速度较慢。
 

csharp

SortedList<int, string> sortedList = new SortedList<int, string>(); 
sortedList.Add(1, "A"); 
sortedList.Add(2, "B");

11. ConcurrentDictionary<TKey, TValue>(线程安全字典)

  • 线程安全的键值对集合,适合在多线程场景下使用。
 

csharp

ConcurrentDictionary<int, string> dict = new ConcurrentDictionary<int, string>();
dict.TryAdd(1, "A");

📌 特殊集合类

12. BitArray(位数组)

  • 用于高效存储和操作位(布尔值)。
 

csharp

BitArray bits = new BitArray(8); 
bits[0] = true;

13. NameValueCollection(键值对集合,允许重复键)

  • 允许键重复,存储字符串键值对。
 

csharp

NameValueCollection collection = new NameValueCollection(); 
collection.Add("key", "value1"); 
collection.Add("key", "value2");

14. HybridDictionary(小规模时使用 ListDictionary,大规模时自动切换到 Hashtable

  • 在数据量少时使用 ListDictionary,大时切换为 Hashtable
 

csharp

HybridDictionary hybridDict = new HybridDictionary(); 
hybridDict.Add("key", "value");

15. ImmutableArray<T>, ImmutableList<T>, ImmutableDictionary<TKey, TValue>(不可变集合)

  • 定义后不可修改,适用于线程安全场景。
 

csharp

var immutableList = ImmutableList.Create(1, 2, 3); 
immutableList = immutableList.Add(4);

🔥 总结

数据结构特点适用场景
Array固定大小,访问快固定长度数据集
List<T>可变长度,支持索引访问随机访问和动态添加
LinkedList<T>双向链表,插入/删除快频繁修改和插入
Stack<T>后进先出逆序操作
Queue<T>先进先出按顺序处理任务
HashSet<T>元素唯一去重集合
SortedSet<T>唯一且排序唯一+排序
Dictionary<K,V>快速键值对访问快速查找
SortedDictionary<K,V>按键排序排序+快速查找
ConcurrentBag<T>线程安全的集合并发访问
ImmutableList<T>不可变集合线程安全

如果你要在多线程环境下操作,建议用 ConcurrentDictionaryConcurrentBagBlockingCollection
如果需要有序性,用 SortedListSortedDictionary
如果要去重,用 HashSetSortedSet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32842.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用于 RGB-D 显著目标检测的点感知交互和 CNN 诱导的细化网络

摘要 通过整合来自RGB图像和深度图的互补信息&#xff0c;能够提升在复杂且具有挑战性场景下的显著性目标检测&#xff08;SOD&#xff09;能力。近年来&#xff0c;卷积神经网络&#xff08;CNNs&#xff09;在特征提取和跨模态交互方面的重要作用已得到充分挖掘&#xff0c;但…

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 校园周边美食探索及分享平台结构图…

chrome浏览器插件拓展捕获页面的响应体内容

因为chrome extension官方没有的直接获取响应体的方法&#xff0c;所以需要自己实现方法来获取&#xff0c;实现的方式有很多种&#xff0c;这是记录的第二种&#xff0c;第一种就是使用vconsole来实现&#xff0c;vconsole是一个开源框架&#xff0c;一个轻量、可拓展、针对手…

【Linux指北】Linux的重定向与管道

一、了解Linux目录配置标准FHS FHS本质&#xff1a;是一套规定Linux目录结构&#xff0c;软件建议安装位置的标准。 (使用Linux来开发产品或者发布软件的公司、个人太多&#xff0c;如果每家公司或者个人都按照自己的意愿来配置文件或者软件的存放位置&#xff0c;这无疑是一…

Qt6.8.2中JavaScript调用WebAssembly的js文件<1>

前段时间已经学习了如何在QtAssembly中编译FFmpeg资源了&#xff0c;接下来需要使用Html来调用QtCreator中WebAssembly套件写的功能&#xff0c;逐步实现javascrpt与c复杂功能的视线。 接下来我先为大家介绍一个非常简单的加法调用吧&#xff01; 功能讲解 开发环境&#xf…

3.13-进程

进程 进程和程序 程序&#xff1a;编译好的二进制文件&#xff0c;不占用系统资源&#xff08;内存&#xff09;。进程&#xff1a;活跃的程序&#xff0c;不消耗系统图资源&#xff08;内存&#xff09;。 MMU PCB 进程控制块 本质&#xff1a;结构体&#xff1a;struct …

在 CentOS 7 上安装 PHP 7.3

在 CentOS 7 上安装 PHP 7.3 可以按照以下步骤进行操作&#xff1a; 1. 安装必要的依赖和 EPEL 仓库 EPEL&#xff08;Extra Packages for Enterprise Linux&#xff09;是为企业级 Linux 提供额外软件包的仓库&#xff0c;yum-utils 用于管理 yum 仓库。 sudo yum install -…

DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了&#xff0c;虽然经过扩容和调整&#xff0c;但反应依旧不稳定&#xff0c;甚至小圆圈转半天最后却提示“服务器繁忙&#xff0c;请稍后再试。” 故此&#xff0c;本文通过讲解在本地部署 DeepSeek并配合python代码实现&#xff0c;让你零成本搭建自己的AI…

C++从入门到入土(七)——多态

目录 前言 多态的概念 多态的定义 虚函数的介绍 虚函数的重写/覆盖 析构函数的重写 override和final关键字 纯虚函数和抽象类 重写/重载/隐藏总结 多态的原理 小结 前言 C一共有三个特性&#xff0c;封装、继承和多态&#xff0c;在前面的文章中&#xff0c;我们分别…

浅谈时钟启动和Systemlnit函数

时钟是STM32的关键&#xff0c;是整个系统的心脏&#xff0c;时钟如何启动&#xff0c;时钟源如何选择&#xff0c;各个参数如何设置&#xff0c;我们从源码来简单分析一下时钟的启动函数Systemlnit&#xff08;&#xff09;。 Systemlnit函数简介 我们先来看一下源程序的注释…

【数据结构】6栈

0 章节 3&#xff0e;1到3&#xff0e;3小节。 认知与理解栈结构&#xff1b; 列举栈的操作特点。 理解并列举栈的应用案例。 重点 栈的特点与实现&#xff1b; 难点 栈的灵活实现与应用 作业或思考题 完成学习测试&#xff12;&#xff0c;&#xff1f; 内容达成以下标准(考核…

HOT100——链表篇Leetcode160. 相交链表

文章目录 题目&#xff1a;Leetcode160. 相交链表原题链接思路代码 题目&#xff1a;Leetcode160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表…

江科大51单片机笔记【16】AD/DA转换(下)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…

【CF】Day5——Codeforces Round 921 (Div. 2) BC

B. A Balanced Problemset? 题目&#xff1a; 思路&#xff1a; 这道题要我们分成n个子问题&#xff0c;我们假设这几个子问题分别是a1,a2,a3,...an&#xff0c; 那么就是让我们求 gcd(a1,a2,a3,....,an)&#xff0c;我们假设这个值是d 那么就有 d | a1&#xff0c;d | a2…

Mininet 自定义拓扑类型详解

Mininet 通过 --topo 参数支持多种自定义网络拓扑结构&#xff0c;适用于不同场景的网络模拟需求。以下是所有内置拓扑类型及其参数说明&#xff1a; 一、基础拓扑类型 拓扑类型参数格式说明示例命令singlesingle,<n>单一交换机连接所有主机&#xff08;默认 2 台主机&a…

图论part3|101.孤岛的总面积、沉没孤岛、417. 太平洋大西洋水流问题

101. 孤岛的总面积 &#x1f517;&#xff1a;101. 孤岛的总面积思路&#xff1a;和昨天的岛的区别是&#xff1a;是否有挨着边的岛屿 所以可以先遍历四条边挨着的岛屿&#xff0c;把他们标记为非孤岛再计算其他岛屿当中的最大面积 代码&#xff1a;&#xff08;深度搜索&…

第十一届蓝桥杯单片机国赛

什么&#xff1f;4T模拟赛和省赛做起来轻轻松松&#xff1f;不妨来挑战一下第十一届国赛&#xff0c;这一届的国赛居然没考超声波、串口通信&#xff01;只要你正确地理解了题目的意思&#xff0c;规避出题人挖的坑&#xff0c;拿个国一轻轻松松。 附件&#xff1a;第十一届蓝桥…

【Unity6打包Android】游戏启动的隐私政策弹窗(报错处理)

Unity版本&#xff1a;Unity6000.0.24 增加弹窗步骤 1. 自定义AndroidManifest 1.1 在Player Setting > Publishing Settings > Build下勾选Custom Main Manifest&#xff0c;在Assets/Plugins/Android路径下生成AndroidManifest.xml文件 1.2 修改AndroidManifest.xml…

记录一个SQL自动执行的html页面

在实际工作场景中&#xff0c;需要运用到大量SQL语句更新业务逻辑&#xff0c;对程序员本身&#xff0c;写好的sql语句执行没有多大问题&#xff08;图1&#xff09;&#xff0c;但是对于普通用户来说还是有操作难度的。因此我们需要构建一个HTML页面&#xff08;图2&#xff0…

mac安装mysql之后报错zsh: command not found: mysql !

在Mac上安装MySQL后&#xff0c;如果终端中找不到mysql命令&#xff0c;通常是 因为MySQL的命令行工具&#xff08;如mysql客户端&#xff09;没有被正确地添加到你的环境变量中。 检查 MySQL 是否已安装 ps -ef|grep mysql查看到路径在 /usr/local/mysql/bin 查看 .bash_pro…