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.mzph.cn/diannao/73196.shtml

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

相关文章

《Python实战进阶》第21集:数据存储:Redis 与 MongoDB 的使用场景

第21集&#xff1a;数据存储&#xff1a;Redis 与 MongoDB 的使用场景 摘要 在现代应用开发中&#xff0c;数据存储的选择直接影响系统的性能、扩展性和成本。Redis 和 MongoDB 是两种极具代表性的数据库技术&#xff0c;它们分别擅长解决不同场景下的问题。本文将深入探讨 Re…

三视图转stl导出 空心面片体 networkx shapely triangle numpy-stl

from shapely.geometry import Polygon import triangle from shapely.ops import unary_union from stl import mesh import numpy as np from collections import defaultdict from 三维投影线段寻找 import get_adjusted_clusters,get_clusters,get_intersect_lines import …

大摩闭门会:250312 学习总结报告

如果图片分辨率不足&#xff0c;可右键图片在新标签打开图片或者下载末尾源文件进行查看 本文只是针对视频做相应学术记录&#xff0c;进行学习讨论使用

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 开发资料下载链接&#xff1a;http://www.prechin.cn/gongsixinwen/208.html 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…

ESP32芯片模组方案,设备物联网无线通信,WiFi蓝牙交互控制应用

在当下&#xff0c;物联网正以前所未有的速度席卷全球&#xff0c;从繁华都市的智能建筑&#xff0c;到宁静乡村的智慧农业&#xff0c;从人们日常使用的可穿戴设备&#xff0c;到工业领域复杂精密的自动化生产线&#xff0c;物联网的触角已深入到生活与生产的每一个角落。 而…

Linux第二次练习

1.首先在根下面创建一个名为text的目录 2.在根目录下新建一个text目录&#xff0c;然后在text目录中新建上图的一级目录、二级目录以及三级目录 3.显示/text目录下文件的树形拓扑图 4.将linux树状结构图中列出的所有文件用ll命令列出来

百鸡问题-

百鸡问题 #include<stdio.h> int main(){int n;scanf("%d",&n);int x,y,z;for(x0;x<100;x){for(y0;y<100;y){for(z0;z<100;z){if((x*15y*9z)<(3*n) && ((xyz)100)){printf("x%d,y%d,z%d\n",x,y,z);}}}}return 0; }

LVDS(Low Voltage Differential Signaling)电平详解

一、LVDS的定义与核心特性 LVDS&#xff08;低压差分信号&#xff09;是一种 低功耗、高速、抗干扰 的差分信号传输技术&#xff0c;通过一对互补的电压信号&#xff08;正负端差值&#xff09;传递数据。其核心特性包括&#xff1a; 电气特性 电压摆幅&#xff1a;差分电压约…

【OpenFeign 面试专题】

OpenFeign 面试专题 OpenFeign 的核心原理OpenFeign 如何与 Ribbon、Hystrix 集成Ribbon的负载均衡策略如何自定义 OpenFeign 的请求编码和响应解码OpenFeign 如何传递请求头&#xff08;Header&#xff09;信息OpenFeign 如何处理超时和重试OpenFeign 支持哪些 HTTP 客户端实现…

Adobe Acrobat Pro setting

防火墙断网组织弹窗 Adobe软件突然弹窗“THIS APP HAS BEEN DISABLED”&#xff1f;别慌&#xff0c;几步教你轻松解决&#xff01; 禁用代理 解决Adobe出现This unlicensed Photoshop app has been disabled.禁止使用 rules:- DOMAIN-KEYWORD,adobe,REJECT

搜索插入位置(js实现,LeetCode:35)

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入…

5. 前后端实现文件上传与解析

1. 说明 在实际开发中&#xff0c;比较常见的一个功能是需要在前端页面中选择系统中的某个文件上传到服务器中进行解析&#xff0c;解析后的文件内容可以用来在服务器中当作参数&#xff0c;或者传递给其它组件使用&#xff0c;或者需要存储到数据库中。所以本文就提供一种方式…

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(32)万剑归宗破妖阵 - 最长递增子序列(LIS)

《灵珠觉醒:从零到算法金仙的C++修炼》卷三天劫试炼(32)万剑归宗破妖阵 - 最长递增子序列(LIS) 哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的万剑谷,谷中有一座巨大的万剑归宗剑阵,剑阵闪烁着神秘的光芒。谷口有一块巨大的石碑,上面刻着一行文字:…

【redis】使用redis作为缓存时所注意事项

缓存更新策略 在 Redis 缓存中&#xff0c;缓存的更新策略主要有**定期生成&#xff08;定时更新&#xff09;和实时生成&#xff08;即时更新&#xff09;**两种方式。不同的策略适用于不同的业务场景&#xff0c;涉及性能、数据一致性和系统负载等方面的权衡。 1. 定期生成&…

计算机网络:计算机网络的分类

按分布范围分类&#xff1a;广域网&#xff0c;城域网&#xff0c;局域网&#xff0c;个域网 按传输技术分类&#xff1a;广播式网络&#xff0c;点对点网络 按拓扑结构分类&#xff1a;总线型&#xff0c;环形&#xff0c;星形&#xff0c;网状 按传输介质分类&#xff1a;…

解决pip安装uv时下载速度慢

验证优化效果 方案 1&#xff1a;临时使用国内镜像源&#xff08;推荐&#xff09; pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple 速度提升&#xff1a;镜像源服务器位于国内&#xff0c;带宽充足&#xff0c;通常可达 1-10MB/s 支持源列表&#xff1a; # 清…

SpringCloud Alibaba——入门简介

一、是什么 &#xff08;1&#xff09;诞生 2018.10.31&#xff0c;Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器&#xff0c;并在 Maven 中央库发布了第一个版本 &#xff08;2&#xff09;介绍 &#xff08;3&#xff09;&#xff1f;何为必须组件 二、能干嘛…

Python完全指南:从基础到实践的编程艺术

引言&#xff1a;数字时代的瑞士军刀 在人工智能与大数据浪潮中&#xff0c;Python如同编程世界的"瑞士军刀"&#xff0c;以其优雅的语法和强大的生态征服全球开发者。本文将从语言哲学到实战应用&#xff0c;为您展开Python编程的全景画卷&#xff0c;揭示这门语言…

Docker 运行 GPUStack 的详细教程

GPUStack GPUStack 是一个用于运行 AI 模型的开源 GPU 集群管理器。它具有广泛的硬件兼容性&#xff0c;支持多种品牌的 GPU&#xff0c;并能在 Apple MacBook、Windows PC 和 Linux 服务器上运行。GPUStack 支持各种 AI 模型&#xff0c;包括大型语言模型&#xff08;LLMs&am…

完整例子和调用关系qt OpenGL

项目结构 首先&#xff0c;你需要在 Qt 项目中创建一个类&#xff0c;继承自 QOpenGLWidget 来进行 OpenGL 渲染。文件结构如下&#xff1a; - main.cpp - MyOpenGLWidget.h - MyOpenGLWidget.cpp - vertex_shader.glsl - fragment_shader.glsl 1. main.cpp 这是 Qt 项目的入口…