C#基础-区分数组与集合
目录
区分数组与集合
1.定义
1)数组
2)集合
2.大小
1)数组
2)集合
3.访问速度
1)数组
2)集合
4.内存管理
1)数组
2)集合
5.使用场景
1)数组
2)集合
总结
本篇文章来学习一下C#的数组(Array)与集合(Collection),数组和集合是两种常用的数据结构,均为引用类型,下面通过定义、大小、访问速度等方面比较数组和集合的不同,来进一步加深对它们的理解。
区分数组与集合
1.定义
1)数组
①数组是固定大小的,可以存储相同类型的多个元素
②一旦数组的大小被确定,就不能改变
③数组的元素可以通过索引访问,索引从0开始
④数组支持基本类型(如 int、char 等)以及引用类型(如 string、object 等)
2)集合
①集合是一种可以动态调整大小的数据结构,支持在运行时增删元素。
②集合是 System.Collections 命名空间下的类,最常用的有List<T>、Dictionary<TKey, TValue>、Queue<T>、Stack<T>等。
③集合可以包含不同类型的元素,尤其是当使用泛型时(如 List<int>),它可以存储指定类型的元素。
④集合在性能上通常比数组灵活,但可能在某些操作(如索引访问)上稍逊色。
2.大小
1)数组
数组的大小在创建时是固定的,创建后不能更改,即创建一个数组时,必须指定它初始长度。如果需要更多元素,必须创建一个新的数组并复制现有数据。
int[] arr = new int[5]; //长度为 5
2)集合
集合(如 List<T>)是动态大小的,在运行时自动调整,可以根据需要增大或缩小。
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Remove(2);
3.访问速度
1)数组
数组的访问速度非常快,因为它们是基于索引访问的,并且是连续的内存块。由于数组是固定大小的,C#运行时不会做任何内存管理上的调整,因此在性能要求较高的场景下,数组是一个不错的选择。
int[] arr = {1, 2, 3, 4, 5};
int firstElement = arr[0];//直接索引访问
2)集合
集合的访问速度通常比数组稍慢,尤其是在使用List<T>这类需要动态调整大小的集合时。动态扩容和内存分配可能会引入一些额外的开销。不过,对于大多数场景,集合的访问性能是可以接受的。List<T>提供的索引访问也很高效,但集合的增删操作比数组更加灵活:
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
int firstElement = list[0];//通过索引访问
4.内存管理
1)数组
数组是一个固定大小的连续内存块,内存分配时一次性申请所需大小。对于值类型(如int、double)来说,数组是非常高效的。对于引用类型,数组中的每个元素存储的是引用(指向对象的指针),而不是实际的对象。
2)集合
集合是动态扩展的,通常在需要时进行内存分配和调整。动态调整大小可能会导致内存碎片,尤其是当集合在执行大量插入和删除操作时。大多数集合会在容量不足时自动扩展。如List<T> 默认会将容量加倍,直到足够容纳新的元素。
5.使用场景
1)数组
①已知大小的数据:事先知道集合大小时,数组通常是最合适的选择。它在内存中是一个连续的块,因此访问速度非常快。如,存储一组固定数量的学生成绩、处理图片的像素数据等。
②性能要求高:当性能非常关键时,尤其是需要频繁访问数据时,数组是一个理想的选择。由于数组的内存布局是连续的,它在访问和操作时会有更高的性能。
③不可修改的集合:当数据在生命周期内不会发生变化(不会增删数据),数组是最合适的选择。
2)集合
①动态数据:当需要在运行时动态地添加、删除或调整数据时,集合(如 List<T>)是理想的选择。如,实时更新用户输入的数据、动态生成的数据集等。
②不确定数据量:当无法确定数据的数量时,集合提供了灵活性。如处理用户输入或从外部源读取数据时,使用集合会更方便。
③复杂的数据操作:集合类(如 Dictionary<T, T>、Queue<T>、Stack<T>)提供了比数组更丰富的功能,如哈希查找、队列操作、堆栈操作等。在需要这些特定功能时,集合通常比数组更合适。
总结
总之,数组适用于数据量固定、性能要求高的场景,而集合适用于数据量动态变化、需要灵活增删和复杂操作的场景。在选择时,应该根据具体的需求和数据特点来决定使用数组还是集合。
| 特性 | 数组(Array) | 集合(Collection) |
| 大小 | 固定,创建时确定 | 动态,可增减元素 |
| 灵活性 | 不灵活,不能动态增减元素 | 灵活,支持动态增删元素 |
| 性能 | 访问速度快,但不支持动态增删 | 访问速度稍慢,支持更复杂的操作 |
| 内存管理 | 固定大小,内存效率高 | 动态内存管理,可能导致内存碎片 |
| 适用场景 | 已知大小的静态数据、高性能需求 | 动态数据、灵活性需求、复杂操作场景 |
好了,本次的分享到这里就结束啦,希望对你有所帮助~
相关文章:
C#基础-区分数组与集合
目录 区分数组与集合 1.定义 1)数组 2)集合 2.大小 1)数组 2)集合 3.访问速度 1)数组 2)集合 4.内存管理 1)数组 2)集合 5.使用场景 1)数组 2࿰…...
ORACLE 19C 安装数据库补丁的详细过程
ORACLE 19c安装DB补丁: 1 确定OPatch的可用性:这里需要注意的是p6880880_190000_Linux-x86-64.zip是有版本对应区别的,需要注意你要打的补丁版本是否支持。 2 将原$ORACLE_HOME目录下的OPatch目录删除或者改名,比如说:…...
tensorflow案例5--基于改进VGG16模型的马铃薯识别,准确率提升0.6%,计算量降低78.07%
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 本次采用VGG16模型进行预测,准确率达到了98.875,但是修改VGG16网络结构, 准确率达到了0.9969,并且计算量…...
代码中的设计模式-策略模式
假如我们有一段代码,有很多的if else function executeAction(type) {if (type A) {console.log(Action A);} else if (type B) {console.log(Action B);} else if (type C) {console.log(Action C);} else {console.log(Unknown action);} }executeAction(A); // 输出: Ac…...
后端Node学习项目-项目基础搭建
前言 各位好,我是前端SkyRain。最近为了响应公司号召,开始对后端知识的学习,作为纯粹小白,记录下每一步的操作流程。 项目仓库:https://gitee.com/sky-rain-drht/drht-node 因为写了文档,代码里注释不是很…...
Python | Leetcode Python题解之第538题把二叉搜索树转换为累加树
题目: 题解: class Solution:def convertBST(self, root: TreeNode) -> TreeNode:def getSuccessor(node: TreeNode) -> TreeNode:succ node.rightwhile succ.left and succ.left ! node:succ succ.leftreturn succtotal 0node rootwhile nod…...
【ZeroMQ 】ZeroMQ中inproc优势有哪些?与其它传输协议有哪些不同?
inproc 是 ZeroMQ 提供的一种传输协议,用于在同一进程内的不同线程之间进行高效的通信。与其他传输协议(如 tcp、ipc 等)不同,inproc 专门针对线程间通信进行了优化,具有极低的延迟和开销。以下是 inproc 的底层原理和…...
spark的学习-03
RDD的创建的两种方式: 方式一:并行化一个已存在的集合 方法:parallelize 并行的意思 将一个集合转换为RDD 方式二:读取外部共享存储系统 方法:textFile、wholeTextFile、newAPIHadoopRDD等 读取外部存储系统的数…...
一文了解Android SELinux
在Android系统中,SELinux(Security-Enhanced Linux)是一个增强的安全机制,用于对系统进行强制访问控制(Mandatory Access Control,MAC)。它限制了应用程序和进程的访问权限,提供了更…...
数据血缘追踪是如何在ETL过程中发挥作用?
在大数据环境下,数据血缘追踪具有重要意义,它能够帮助用户了解数据的派生关系、变换过程和使用情况,进而提高数据的可信度和可操作性。通过数据血缘追踪,ETL用户可以准确追溯数据的来源,快速排查数据异常和问题。 一、…...
跟我学C++中级篇——生产中如何调试程序
一、程序的BUG和异常 程序不是发布到生产环境就万事大吉了。没有人敢保证自己写的代码没有BUG,放心,说这种话的人,基本可以断定是小白。如果在开发阶段出现问题,还是比较好解决的,但是如果真到了生产上,可…...
Python爬虫实战 | 爬取网易云音乐热歌榜单
网易云音乐热歌榜单爬虫实战 环境准备 Python 3.xrequests 库BeautifulSoup 库 安装依赖 pip install requests beautifulsoup4代码 import requests from bs4 import BeautifulSoupdef get_cloud_music_hot_songs():url "http://music.163.com/#/discover/playlist…...
apk因检测是否使用代理无法抓包绕过方式
最近学习了如何在模拟器上抓取APP的包,APP防恶意行为的措施可分为三类: (1)反模拟器调试 (2)反代理 (3)反证书检验 第一种情况: 有的app检验是否使用系统代理,…...
DevOps业务价值流:架构设计最佳实践
系统设计阶段作为需求与研发之间的桥梁,在需求设计阶段的原型设计评审环节,尽管项目组人员可能未完全到齐,但关键角色必须到位,包括技术组长和测试组长。这一安排旨在同步推进两项核心任务:一是完成系统的架构设计&…...
计算机网络——SDN
分布式控制路由 集中式控制路由...
开源数据库 - mysql - innodb源码阅读 - master线程(一)
master struct /** The master thread controlling the server. */void srv_master_thread() {DBUG_TRACE;srv_slot_t *slot; // 槽位THD *thd create_internal_thd(); // 创建内部线程ut_ad(!srv_read_only_mode); //断言 srv_read_only_mode 为 falsesrv_main_thread_proce…...
vscode ssh连接autodl失败
autodl服务器已开启,vscode弹窗显示连接失败 0. 检查状态 这里的端口和主机根据自己的连接更改 ssh -p 52165 rootregion-45.autodl.pro1. 修改config权限 按返回的路径找到config文件 右键--属性--安全--高级--禁用继承--从此对象中删除所有已继承的权限--添加…...
文件系统和日志管理 附实验:远程访问第一台虚拟机日志
文件系统和日志管理 文件系统:文件系统提供了一个接口,用户用来访问硬件设备(硬盘)。 硬件设备上对文件的管理 文件存储在硬盘上,硬盘最小的存储单位是512字节,扇区。 文件在硬盘上的最小存储单位&…...
云上拼团GO指南——腾讯云博客部署案例,双11欢乐GO
知孤云出岫-CSDN博客 目录 腾讯云双11活动介绍 一.双十一活动入口 二.活动亮点 (一)双十一上云拼团Go (二)省钱攻略 (三)上云,多类型服务器供您选择 三.会员双十一冲榜活动 (一)活动内容 &#x…...
【VScode】VScode内的ChatGPT插件——CodeMoss全解析与实用教程
在当今快速发展的编程世界中,开发者们面临着越来越多的挑战。如何提高编程效率,如何快速获取解决方案,成为了每位开发者心中的疑问。今天,我们将深入探讨一款颠覆传统编程体验的插件——CodeMoss,它将ChatGPT的强大功能…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
