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

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&#xff09;数组 2&#xff09;集合 2.大小 1&#xff09;数组 2&#xff09;集合 3.访问速度 1&#xff09;数组 2&#xff09;集合 4.内存管理 1&#xff09;数组 2&#xff09;集合 5.使用场景 1&#xff09;数组 2&#xff0…...

ORACLE 19C 安装数据库补丁的详细过程

ORACLE 19c安装DB补丁&#xff1a; 1 确定OPatch的可用性&#xff1a;这里需要注意的是p6880880_190000_Linux-x86-64.zip是有版本对应区别的&#xff0c;需要注意你要打的补丁版本是否支持。 2 将原$ORACLE_HOME目录下的OPatch目录删除或者改名&#xff0c;比如说&#xff1a…...

tensorflow案例5--基于改进VGG16模型的马铃薯识别,准确率提升0.6%,计算量降低78.07%

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 本次采用VGG16模型进行预测&#xff0c;准确率达到了98.875&#xff0c;但是修改VGG16网络结构&#xff0c; 准确率达到了0.9969&#xff0c;并且计算量…...

代码中的设计模式-策略模式

假如我们有一段代码,有很多的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学习项目-项目基础搭建

前言 各位好&#xff0c;我是前端SkyRain。最近为了响应公司号召&#xff0c;开始对后端知识的学习&#xff0c;作为纯粹小白&#xff0c;记录下每一步的操作流程。 项目仓库&#xff1a;https://gitee.com/sky-rain-drht/drht-node 因为写了文档&#xff0c;代码里注释不是很…...

Python | Leetcode Python题解之第538题把二叉搜索树转换为累加树

题目&#xff1a; 题解&#xff1a; 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 提供的一种传输协议&#xff0c;用于在同一进程内的不同线程之间进行高效的通信。与其他传输协议&#xff08;如 tcp、ipc 等&#xff09;不同&#xff0c;inproc 专门针对线程间通信进行了优化&#xff0c;具有极低的延迟和开销。以下是 inproc 的底层原理和…...

spark的学习-03

RDD的创建的两种方式&#xff1a; 方式一&#xff1a;并行化一个已存在的集合 方法&#xff1a;parallelize 并行的意思 将一个集合转换为RDD 方式二&#xff1a;读取外部共享存储系统 方法&#xff1a;textFile、wholeTextFile、newAPIHadoopRDD等 读取外部存储系统的数…...

一文了解Android SELinux

在Android系统中&#xff0c;SELinux&#xff08;Security-Enhanced Linux&#xff09;是一个增强的安全机制&#xff0c;用于对系统进行强制访问控制&#xff08;Mandatory Access Control&#xff0c;MAC&#xff09;。它限制了应用程序和进程的访问权限&#xff0c;提供了更…...

数据血缘追踪是如何在ETL过程中发挥作用?

在大数据环境下&#xff0c;数据血缘追踪具有重要意义&#xff0c;它能够帮助用户了解数据的派生关系、变换过程和使用情况&#xff0c;进而提高数据的可信度和可操作性。通过数据血缘追踪&#xff0c;ETL用户可以准确追溯数据的来源&#xff0c;快速排查数据异常和问题。 一、…...

跟我学C++中级篇——生产中如何调试程序

一、程序的BUG和异常 程序不是发布到生产环境就万事大吉了。没有人敢保证自己写的代码没有BUG&#xff0c;放心&#xff0c;说这种话的人&#xff0c;基本可以断定是小白。如果在开发阶段出现问题&#xff0c;还是比较好解决的&#xff0c;但是如果真到了生产上&#xff0c;可…...

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的包&#xff0c;APP防恶意行为的措施可分为三类&#xff1a; &#xff08;1&#xff09;反模拟器调试 &#xff08;2&#xff09;反代理 &#xff08;3&#xff09;反证书检验 第一种情况&#xff1a; 有的app检验是否使用系统代理&#xff0c…...

DevOps业务价值流:架构设计最佳实践

系统设计阶段作为需求与研发之间的桥梁&#xff0c;在需求设计阶段的原型设计评审环节&#xff0c;尽管项目组人员可能未完全到齐&#xff0c;但关键角色必须到位&#xff0c;包括技术组长和测试组长。这一安排旨在同步推进两项核心任务&#xff1a;一是完成系统的架构设计&…...

计算机网络——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服务器已开启&#xff0c;vscode弹窗显示连接失败 0. 检查状态 这里的端口和主机根据自己的连接更改 ssh -p 52165 rootregion-45.autodl.pro1. 修改config权限 按返回的路径找到config文件 右键--属性--安全--高级--禁用继承--从此对象中删除所有已继承的权限--添加…...

文件系统和日志管理 附实验:远程访问第一台虚拟机日志

文件系统和日志管理 文件系统&#xff1a;文件系统提供了一个接口&#xff0c;用户用来访问硬件设备&#xff08;硬盘&#xff09;。 硬件设备上对文件的管理 文件存储在硬盘上&#xff0c;硬盘最小的存储单位是512字节&#xff0c;扇区。 文件在硬盘上的最小存储单位&…...

云上拼团GO指南——腾讯云博客部署案例,双11欢乐GO

知孤云出岫-CSDN博客 目录 腾讯云双11活动介绍 一.双十一活动入口 二.活动亮点 &#xff08;一&#xff09;双十一上云拼团Go (二&#xff09;省钱攻略 &#xff08;三&#xff09;上云&#xff0c;多类型服务器供您选择 三.会员双十一冲榜活动 (一)活动内容 &#x…...

【VScode】VScode内的ChatGPT插件——CodeMoss全解析与实用教程

在当今快速发展的编程世界中&#xff0c;开发者们面临着越来越多的挑战。如何提高编程效率&#xff0c;如何快速获取解决方案&#xff0c;成为了每位开发者心中的疑问。今天&#xff0c;我们将深入探讨一款颠覆传统编程体验的插件——CodeMoss&#xff0c;它将ChatGPT的强大功能…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...