C#中的数据结构介绍
作者:.NET开发菜鸟 发布时间:2022-06-05 18:34:26
一、数组(Array)
数组具有以下的特点:
数组属于线性结构,在内存中是连续存放的。
数组的元素类型必须相同。
数组可以直接通过下标访问。
数组的查找速度非常快,新增和删除速度慢。
数组在初始化时要指定数组长度。
二、动态数组(ArrayList)
动态数组具有以下的特点:
ArrayList的底层其实就是一个数组。
ArrayList在声明时不必指定长度,会根据存储的数据动态的增加或减少长度。
ArrayList会把所有的元素都当做Object处理,因此可以存储不同数据类型的元素。
插入和删除一个元素时,会移动它之后所有元素的位置,效率低,频繁进行插入或者删除元素推荐使用LinkedList。
ArrayList是非类型安全的,在插入和删除元素时会进行拆箱和装箱问题,影响性能,效率低。
三、泛型List
泛型List具有以下的特点:
List是ArrayList的泛型类。
泛型List需要在声明时指定具体的类型。
泛型List没有装箱和拆箱操作,因此List比ArrayList效率高而且类型安全。
四、双向链表(LinkedList)
双向链表具有如下特点:
链表的节点在内存中的空间是不连续的,每块空间称作一个节点,每个节点都存有一个前驱和后置指针,分别指向前一个节点和后一个节点,因此向链表中添加和删除元素的效果高,只需要更改相应节点的指针指向即可。
链表的查找效率低。查找元素时不能通过下标进行访问,只能从头开始通过地址按顺序查找。
五、堆栈(Stack)
堆栈具有如下特点:
堆栈是先进后出的原则,最先插入的元素最后被访问,最后插入的元素最先被访问。
Push入栈,Pop出栈并返回栈顶元素,Peek只返回栈顶元素。
六、Queue(链表)
链表具有以下特点:
链表是先进先出的原则,最先进入的元素最先被访问,最后进入的元素最后被访问。
Enqueue入队列,Dequeue出队列并返回列首元素,Peek只返回列首元素。
七、字典(Dictionary)
字典具有以下特点:
创建字典时需要指定key和value的数据类型。
字典中的key值是唯一的,value的值可以不唯一。
可以通过key快速查找对应的value,速度快,但是消耗内存。
几种常见数据结构的使用情景
Array | 需要处理的元素数量确定并且需要使用下标进行访问时可以考虑,不过建议使用List<T>。 |
ArrayList | 不推荐使用,建议使用泛型List<T>。 |
泛型List<T> | 需要处理的元素数量不确定时,通常建议使用。 |
LiskedList<T> | 链表适合元素数量不固定,而且需要经常增减节点的情况,链表增减元素效率高。 |
Queue<T> | 队列适合于先进先出的情况。 |
Stack<T> | 堆栈适合于先进后出的情况。 |
Dictionary<K,T> | 字典适合于需要键值对操作的情况。 |
来源:https://www.cnblogs.com/dotnet261010/p/12333598.html


猜你喜欢
- “Hello World!”的程序写过不少,不过都是在黑色背景的控制台上显示白色的文字。这次决定写点特别的,让“Hello World!”变
- 平时写项目的时候,java之父叫我们多打日志,我们通常使用traceId和requestId来保存完整请求的链路日志,例如市面上的skywa
- 1.先在build.gradle(Module)下添加引用viewPager2的库implementation 'androidx.
- 前言本文主要给大家介绍了关于JDK8新增的原子性操作类LongAdder的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的
- 一、Mybatis一对多分解式查询分解式查询就是将一条Sql语句拆分成多条在MyBatis多表查询中,使用连接查询时一个Sql语句就可以查询
- 本总结我对于JAVA多线程中线程之间的通信方式的理解,主要以代码结合文字的方式来讨论线程间的通信,故摘抄了书中的一些示例代码,具体内容如下①
- 本文实例为大家分享了Java实现多线程在线聊天的具体代码,供大家参考,具体内容如下上一篇博客通过UDP实现了聊天,但只能单方面发送消息,这次
- 本文实例分析了采用C#实现软件自动更新的方法,是非常实用的功能,值得学习和借鉴。具体如下:1.问题概述:长期以来,广大程序员为到底是使用Cl
- 新版的IDEA为了防止 pom 更新时,MAVEN 自动导包时卡死的问题,取消了自动导包机制。但新增了导入按钮和快捷键。 问题id
- 为什么要用ELKELK实际上是三个工具,Elastricsearch + Logstash + Kibana,通过ELK,用来收集日志还有进
- 一个Maprduce程序主要包括三部分:Mapper类、Reducer类、执行类。Maven项目下所需依赖<dependencies&
- ssm mybatis配置多个mapper目录通配符配置比如目录的结构如下:com/test/web/user/mappercom/test
- 正文:相关术语翻译说明:Mark,标记;Sweep,清除;Compact,整理; 也有人翻译为压缩,译者认为GC时不存在压缩这回事。Copy
- 消费逻辑上文 流式图表框架搭建框架搭建好之后着手开发下kafka的核心消费逻辑,流式图表的核心消费逻辑就是实现一个消费链接池维护消
- 一、引言90坦克大战,很经典的一款游戏,当年与小伙伴一人一个手柄,搬上小板凳坐在电视机前,身体时不时跟随手柄摇晃着,时而表情严肃、眉头紧锁,
- 相信有些同学跟我一样,曾经对这个问题很疑惑。在网上也看了一些别人说的观点,评论不一。有说有值传递和引用传递两种,也有说只有值传递的,这里只说
- > 此文主要通过WinForm来制作一个休息提醒闹钟,通过设置时间间隔进行提醒,避免沉浸式的投入到工作或者学习当中,战斗的同时也要照顾
- Task的MSDN的描述如下:【Task类的表示单个操作不会返回一个值,通常以异步方式执行。Task对象是一种的中心思想基于任务的异步模式首
- 本文实例讲述了C#使用IComparer自定义List类实现排序的方法。分享给大家供大家参考。具体如下:List类中不带参数的Sort函数可
- 引言这里实现一个简单的图片上传功能,主要是熟悉这个文件上传的交互流程。关于更复杂的文件上传,如大文件的切片上传、断点续传等,这里不做过多介绍