C# 集合(Collection)
文章目录
- 前言
- 一、动态数组(ArrayList)
- 二、哈希表(Hashtable)
- 三、排序列表(SortedList)
- 四、堆栈(Stack)
- 五、队列(Queue)
- 六、点阵列(BitArray)
前言
在 C# 编程领域,集合(Collection)类是不可或缺的重要组成部分,专为数据存储、检索与操作精心构建。它们提供了对栈、队列、列表及哈希表等经典数据结构的有力支持,多数集合类遵循相同接口规范,这既保障了使用方式的连贯性,又利于代码在不同集合类型间灵活切换与复用。集合类基于 Object 类(C# 所有数据类型的根基)构建对象集合,能容纳多样数据类型,还可按需动态调配内存、依索引便捷访问元素,以契合复杂多变的编程诉求。
一、动态数组(ArrayList)
ArrayList 呈现为可单独索引的有序对象集,类似数组却更具弹性,能在运行时自动调整容量。与静态数组需预先定义固定大小不同,它允许在指定索引处自由增删元素,内部会高效重分配内存。常用于处理元素数量不定的数据场景,像动态收集用户输入、存储临时计算结果等。
示例代码
using System;
using System.Collections;class Program
{static void Main(){ArrayList arrayList = new ArrayList();// 添加元素arrayList.Add(10);arrayList.Add("Hello");arrayList.Add(true);// 基于索引访问与修改元素int valueAtIndex1 = (int)arrayList[1];arrayList[2] = false;// 遍历 ArrayListforeach (var item in arrayList){Console.WriteLine(item);}// 移除元素arrayList.Remove("Hello");Console.WriteLine("After removal:");foreach (var item in arrayList){Console.WriteLine(item);}}
}
上述代码先创建 ArrayList 实例,依次添加整型、字符串、布尔型数据,展示其异构存储能力;再按索引读取、修改元素;随后遍历输出所有元素,最后移除指定字符串元素并再次遍历展示动态调整效果,输出依次为 “10”“Hello”“True” 及 “10”“False”。
二、哈希表(Hashtable)
Hashtable 借助键值对(Key/Value Pair)存储与检索数据,凭借哈希算法实现快速定位,键作为访问入口,对应唯一值。适用于需依据特定标识迅速查找对应内容的场景,如依据学号查学生档案、依商品条码取商品详情,在大数据量下优势尤为凸显。
示例代码
using System;
using System.Collections;class Program
{static void Main(){Hashtable hashtable = new Hashtable();// 添加键值对hashtable.Add("Apple", 5);hashtable.Add("Banana", 8);hasht月table.Add("Cherry", 3);// 通过键获取值int appleQuantity = (int)hashtable["Apple"];Console.WriteLine($"Apple quantity: {appleQuantity}");// 遍历 Hashtableforeach (DictionaryEntry entry in hashtable){Console.WriteLine($"{entry.Key}: {entry.Value}");}// 判断键是否存在并更新值if (hashtable.ContainsKey("Banana")){hashtable["Banana"] = 10;}Console.WriteLine("After update:");foreach (DictionaryEntry entry in hashtable){Console.WriteLine($"{entry.Key}: {entry.Value}");}}
}
此代码构建 Hashtable 存储水果及数量,先添加三组键值对,依键 “Apple” 精准取值展示查找便捷性;再遍历输出所有键值信息;确认 “Banana” 键存在后更新对应值并二次遍历呈现更新成果,输出含各水果初始及更新后数量等信息。
三、排序列表(SortedList)
SortedList 融合数组与哈希表之长,可借索引(如同数组)或键(类似哈希表)访问元素,且内部按键值自动排序,维持有序状态。在兼顾顺序性与快速查找需求场景下表现出色,如管理按姓氏笔画排序且可依姓名或序号检索的人员名单。
示例代码
using System;
using System.Collections;class Program
{static void Main(){SortedList sortedList = new SortedList();// 添加键值对sortedList.Add("Zhang", 25);sortedList.Add("Li", 30);sortedList.Add("Wang", 28);// 通过索引访问int valueAtIndex1 = (int)sortedList[1];Console.WriteLine($"Value at index 1: {valueAtIndex1}");// 通过键访问int wangAge = (int)sortedList["Wang"];Console.WriteLine($"Wang's age: {wangAge}");// 遍历 SortedListforeach (DictionaryEntry entry in sortedList){Console.WriteLine($"{entry.Key}: {entry.Value}");}}
}
代码创建 SortedList 存人员姓名及年龄,添加数据后,既按索引获取第二元素对应年龄展示数组特性,又依 “Wang” 键查年龄凸显哈希表功能;最终遍历输出有序键值对,展示排序与双访问模式结合优势。
四、堆栈(Stack)
Stack 遵循后进先出(LIFO)原则,新元素 “推入(Push)” 栈顶,移除时 “弹出(Pop)” 栈顶元素,常用于处理需逆序回溯或操作顺序敏感事务,像解析嵌套括号表达式、实现撤销重做功能,保障操作按正确逆序执行。
示例代码
using System;
using System.Collections;class Program
{static void Main(){Stack stack = new Stack();// 推入元素stack.Push(1);stack.Push(2);stack.Push(3);// 弹出元素并输出int poppedValue = (int)stack.Pop();Console.WriteLine($"Popped value: {poppedValue}");// 遍历 Stack(需转换为数组辅助)object[] stackArray = stack.ToArray();for (int i = stackArray.Length - 1; i >= 0; i--){Console.WriteLine(stackArray[i]);}}
}
此例先向 Stack 依次推入 1、2、3 三个元素,弹出栈顶 “3” 并输出;后将 Stack 转数组逆序遍历,展示 LIFO 特性,输出先是 “3”,再依次为 “2”“1”。
五、队列(Queue)
Queue 依先进先出(FIFO)规则运作,元素 “入队(Enqueue)” 队尾,“出队(Dequeue)” 于队首,精准模拟现实排队场景,广泛用于任务调度、消息传递等需按先来后到处理事务之处,如计算机多任务排队等待 CPU 执行。
示例代码
using System;
using System.Collections;class Program
{static void Main(){Queue queue = new Queue();// 入队元素queue.Enqueue("Task 1");queue.Enqueue("Task 2");queue.Enqueue("Task 3");// 出队元素并输出string dequeuedTask = (string)queue.Dequeue();Console.WriteLine($"Dequeued task: {dequeuedTask}");// 遍历 Queue(需转换为数组辅助)object[] queueArray = queue.ToArray();foreach (var item in queueArray){Console.WriteLine(item);}}
}
代码构建 Queue 模拟任务队列,“Task 1”“Task 2”“Task 3” 依次入队,出队首 “Task 1” 并输出;转数组遍历展示剩余任务,输出依次是 “Task 1”“Task 2”“Task 3”(出队后剩 “Task 2”“Task 3” 及遍历展示顺序)。
六、点阵列(BitArray)
BitArray 是二进制数组,用 0 和 1 存数据,适合处理位级信息,尤其在事先不知所需存储位数时大显身手,常见于网络通信、图像数据处理、底层系统状态标识等,以紧凑方式管理二进制数据。
示例代码
using System;
using System.Collections;class Program
{static void Main(){BitArray bitArray = new BitArray(5);// 设置位值bitArray[0] = true;bitArray[2] = true;// 检查位值bool bitValueAt1 = bitArray[1];Console.WriteLine($"Bit value at index 1: {bitValueAt1}");// 遍历 BitArrayfor (int i = 0; i < bitArray.Length; i++){Console.WriteLine($"Bit value at index {i}: {bitArray[i]}");}}
}
本示例创建长度为 5 的 BitArray,设置第 1、3 位(索引 0、2)为 “true”(即值 1),检查索引 1 位值并遍历输出各点位值,展示二进制位存储、访问与遍历操作,输出含各点位设置及初始值情况。
相关文章:

C# 集合(Collection)
文章目录 前言一、动态数组(ArrayList)二、哈希表(Hashtable)三、排序列表(SortedList)四、堆栈(Stack)五、队列(Queue)六、点阵列(BitArray&…...

【智能控制】实验,基于MATLAB的模糊推理系统设计,模糊控制系统设计
关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...
前端跳转路由的时候,清掉缓存
清除路由缓存的方法 使用 $router.push() 方法:在跳转路由时,可以通过传递一个包含 replace: true 属性的对象来实现清除路由缓存。例如: this.$router.push({ path: "/new-route", replace: true }); 使用 $router.replace…...
基于 LlamaFactory 的 LoRA 微调模型支持 vllm 批量推理的实现
背景 LlamaFactory 的 LoRA 微调功能非常便捷,微调后的模型,没有直接支持 vllm 推理,故导致推理速度不够快。 LlamaFactory 目前支持通过 VLLM API 进行部署,调用 API 时的响应速度,仍然没有vllm批量推理的速度快。 …...

【赵渝强老师】PostgreSQL的物理存储结构
PostgreSQL在执行initdb的数据库集群初始化时会指定一个目录。该目录通过环境变量$PGDATA来表示。当数据库集群初始化完成后,会在这个目录生成相关的子目录以及一些文件。这些生成的文件就是PostgreSQL的物理存储结构中的文件。如下图所示。 如上图所示,…...

智能探针技术:实现可视、可知、可诊的主动网络运维策略
网络维护的重要性 网络运维是确保网络系统稳定、高效、安全运行的关键活动。在当今这个高度依赖信息技术的时代,网络运维的重要性不仅体现在技术层面,更关乎到企业运营的方方面面。网络运维具有保障网络的稳定性、提升网络运维性能、降低企业运营成本等…...
CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(不会)
通过网盘分享的文件:如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…...

debian 11 虚拟机环境搭建过坑记录
目录 安装过程系统配置修改 sudoers 文件网络配置换源安装桌面mount nfs 挂载安装复制功能tab 无法补全其他安装 软件配置eclipse 配置git 配置老虚拟机硬盘挂载 参考 原来去 debian 官网下载了一个最新的 debian 12,安装后出现包依赖问题,搞了半天&…...
MYSQL 什么是内连接 外连接 左连接 右连接?及适用场景
在 SQL 中,连接(JOIN)是用于组合来自两个或更多表的行的一种方法。根据连接的方式不同,可以分为几种类型的连接:内连接(INNER JOIN)、外连接(OUTER JOIN)、左连接&#x…...

利用Ubuntu批量下载modis图像(New)
由于最近modis原来批量下载的代码不再直接给出,因此,再次梳理如何利用Ubuntu下载modis数据。 之前的下载代码为十分长,现在只给出一部分,需要自己再补充另一部分。之前的为: 感谢郭师兄的指导(https://blo…...

【Springboot】@Autowired和@Resource的区别
【Springboot】Autowired和Resource的区别 【一】定义【1】Autowired【2】Resource 【二】区别【1】包含的属性不同【2】Autowired默认按byType自动装配,而Resource默认byName自动装配【3】注解应用的地方不同【4】出处不同【5】装配顺序不用(1ÿ…...

UIE与ERNIE-Layout:智能视频问答任务初探
内容来自百度飞桨ai社区UIE与ERNIE-Layout:智能视频问答任务初探: 如有侵权,请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …...

数据结构:树
树的基本定义: 树是一种数据结构,它是由n(n>1)个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: …...
docker 怎么启动nginx
在Docker中启动Nginx容器是一个简单的过程。以下是启动Nginx容器的步骤: 拉取Nginx镜像: 首先,你需要从Docker Hub拉取Nginx的官方镜像。使用以下命令: docker pull nginx运行Nginx容器: 使用docker run命令来启动一个…...

【智商检测——DP】
题目 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M 110; int f[N][M]; int main() {int n, k;cin >> n >> k;for(int i 1; i < n; i){int x;cin >> x;f[i][0] __gcd(f[i-1][0], x);for(int j 1; j < min(i, k)…...

YOLOv11改进,YOLOv11添加SAConv可切换空洞卷积,二次创新C3k2结构
摘要 作者提出的技术结合了递归特征金字塔和可切换空洞卷积,通过强化多尺度特征学习和自适应的空洞卷积,显著提升了目标检测的效果。 理论介绍 空洞卷积(Atrous Convolution)是一种可以在卷积操作中插入“空洞”来扩大感受野的技术,更有效地捕捉到图像中的大范围上下文…...

使用R语言优雅的获取任意区域的POI,道路,河流等数据
POI是“Polnt of Information”的缩写,中文可以翻译为“信息点”。是地图上任何非地理意义的有意义的点,如商店,酒吧,加油站,医院,车站等。POI,道路网,河流等是我们日常研究中经常需…...
【设计模式】工厂方法模式 在java中的应用
文章目录 1. 引言工厂方法模式的定义 2. 工厂方法模式的核心概念工厂方法模式的目的和原理与其他创建型模式的比较(如简单工厂和抽象工厂) 3. Java中工厂方法模式的实现基本的工厂方法模式结构示例代码:创建不同类型的日志记录器 4. 工厂方法…...

Pytest框架学习20--conftest.py
conftest.py作用 正常情况下,如果多个py文件之间需要共享数据,如一个变量,或者调用一个方法 需要先在一个新文件中编写函数等,然后在使用的文件中导入,然后使用 pytest中定义个conftest.py来实现数据,参…...
【面试开放题】挫折、问题、擅长、应用技能
1. 项目中遇到的最大挫折是什么?你是如何应对的? 解答思路: 这个问题通常考察你的问题解决能力、抗压能力和团队协作精神。回答时,可以从以下几个角度展开: 问题背景: 描述项目中遇到的具体挑战。是技术难…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...