unity C#中Array、Stack、Queue、Dictionary、HashSet优缺点和使用场景总结

文章目录

  • 数组 (Array)
  • 列表 (List<T>)
  • 栈 (Stack<T>)
  • 队列 (Queue<T>)
  • 链表 (LinkedList<T>)
  • 哈希表 (Dictionary<TKey, TValue>) 或 HashSet<T>
  • 集合 (Collection<T>)

数组 (Array)

优点

  • 高效访问:通过索引可以直接访问任何位置的元素,时间复杂度为O(1)。
  • 连续内存空间:对于CPU缓存友好,能够实现快速的连续读取和遍历操作。
int[] numbers = new int[5] { 1, 2, 3, 4, 5 };
Console.WriteLine(numbers[0]); // 输出 "1"
  • 缺点
    • 固定大小:创建时必须指定大小,且一旦创建后不能改变容量。
    • 插入删除效率低:在数组中间插入或删除元素需要移动其他元素,时间复杂度通常为O(n)。

列表 (List)

优点

  • 动态扩容:自动根据需要增加或减少容量,适用于元素数量不固定的场景。
  • 丰富的操作:提供Add、Insert、Remove等方法,并支持索引访问。
List<int> numbers = new List<int>();
numbers.Add(1);
numbers.Insert(0, 0); // 在开头插入元素
numbers.RemoveAt(1); // 删除第二个元素
  • 缺点
    • 随机插入删除成本:虽然比数组更灵活,但大量插入和删除可能导致性能降低(平均情况下插入和删除的时间复杂度为O(n))。

栈 (Stack)

  • 优点
    • 后进先出 (LIFO):适合用于撤销操作、递归调用栈等场景。
    • 基础操作高效:Push和Pop操作的时间复杂度均为O(1)。
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
int topItem = stack.Pop(); // 返回并移除最后一个压入的元素
  • 缺点
    • 受限的数据结构:仅支持特定类型的堆栈操作,不适合需要双向或多向访问的需求。

队列 (Queue)


- **优点**:- **先进先出 (FIFO)**:适用于任务排队、消息传递等场景。- **基础操作高效**:Enqueue和Dequeue操作的时间复杂度也为O(1)。```csharp
Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
int frontItem = queue.Dequeue(); // 返回并移除最先加入的元素
  • 缺点
    • 同样受限于FIFO特性,不适合非顺序访问需求。

链表 (LinkedList)


- **优点**:- **灵活的内存管理**:节点分散存储,可轻松插入和删除节点,尤其对头尾节点的操作效率高(时间复杂度O(1))。```csharp
LinkedList<int> linkedList = new LinkedList<int>();
linkedList.AddLast(1);
linkedList.AddFirst(0); // 在链表头部添加元素
  • 缺点
    • 随机访问性能差:由于非连续存储,访问中间节点需要从头节点开始遍历,时间复杂度为O(n)。

哈希表 (Dictionary<TKey, TValue>) 或 HashSet

优点

  • 快速查找与插入:基于哈希函数进行数据存储,理想情况下查找、插入和删除的时间复杂度接近O(1)。
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.Add("apple", 1);
int countOfApples = dictionary["apple"]; // 快速通过键获取值HashSet<int> set = new HashSet<int>();
set.Add(1);
bool containsOne = set.Contains(1); // 检查是否包含某个元素
  • 缺点
    • 冲突处理:可能出现哈希冲突,需采用适当策略(如链地址法或开放寻址法)来解决,这可能影响性能。
    • 无序性:迭代输出的顺序不确定(除非使用SortedDictionary<TKey, TValue>)。

集合 (Collection)

说明:在C#中,集合通常指代泛型集合基类,它定义了通用集合行为。实际应用中更多是指其派生类如List<T>ArrayList等。

选择建议:

  • 当元素数量已知且不变,且需要频繁随机访问时,使用数组。
  • 对于需要动态增删且支持索引访问的情况,首选List。
  • 当算法要求按“后进先出”或“先进先出”的顺序处理元素时,分别使用Stack和Queue。
  • 当需要高效的插入、删除和查找操作,而不在乎元素的顺序时,优先考虑LinkedList。
  • 当需要根据键快速查找对应值或者存储唯一元素时,应使用Dictionary<TKey, TValue>或HashSet。

python学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605023.shtml

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

相关文章

Zabbix相关问题及答案(2024)

1、Zabbix是什么&#xff1f;有什么作用&#xff1f; Zabbix是一个企业级的开源监控解决方案&#xff0c;设计用于监控和跟踪服务器、网络设备、硬件和软件的状态和性能。它由Alexei Vladishev开发&#xff0c;并且被广泛地用于各种不同规模的IT环境管理。 Zabbix的主要作用和…

1-04C语言执行过程

一、概述 本小节主要讲解一个C程序从源代码到最终执行的过程&#xff0c;这个过程又可以细分为两部分&#xff1a; 源代码到可执行文件的过程可执行文件在内存中执行 本小节是C语言基础当中&#xff0c;比较容易被初学者忽视的知识点。而实际上&#xff1a; 熟悉C程序从源文…

前端超好玩的小游戏合集来啦--周末两天用html5做一个3D飞行兔子萝卜小游戏

文章目录 💖飞行兔子萝卜小游戏💟效果展示💟代码展示源码获取💖飞行兔子萝卜小游戏 💟效果展示 💟代码展示 <body> <script src=

Debezium发布历史53

原文地址&#xff1a; https://debezium.io/blog/2019/04/11/debezium-0-9-4-final-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 0.9.4.Final 发布 四月 11, 2019 作者&#xff1a; Gunna…

如何选猫粮:买主食冻干猫粮需要注意什么?

随着养猫的人越来越多&#xff0c;铲屎官们对猫咪的饮食也越来越注重。除了猫粮&#xff0c;很多铲屎官还会给猫咪准备小零食。那么&#xff0c;猫咪是不是除了猫粮就没有其他可吃的了呢&#xff1f;答案当然不是。猫咪还有猫冻干、冻干猫粮、猫条等可以选择。每个铲屎官都希望…

Elasticsearch查询多个条件组合

在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;你可以使用"bool"查询来组合多个条件。 下面是一个简单的例子&#xff0c;演示如何在一个查询中使用多个字段&#xff1a; 假设你有一个索引&#xff08;Index&#xff09;叫做"my_index"&#…

【MySQL】索引基础

文章目录 1. 索引介绍2. 创建索引 create index…on…2.1 explain2.2 创建索引create index … on…2.3 删除索引 drop index … on 表名 3. 查看索引 show indexes in …4. 前缀索引4.1 确定最佳前缀长度&#xff1a;索引的选择性 5. 全文索引5.1 创建全文索引 create fulltex…

jQuery :nth-of-type(n)选择器的用法详解

:nth-of-type(n)选择器语法 $(selector:nth-of-type(n)) :nth-of-type(n)选择器语法解析 jQuery中&#xff0c;:nth-of-type(n)选择器可以对selector选择器匹配选择到的所有HTML元素进行二次匹配选择&#xff0c;为了更好地阐述:nth-of-type(n)的语法&#xff0c;这里假设se…

Vue3.4更新 “Slam Dunk“发布!!!

Announcing Vue 3.4 | The Vue Point. vue3.4更新官方文档 在vue2即将结束更新的时候&#xff0c;vue3迎来了一个重要的更新。代号为“&#x1f3c0; Slam Dunk”&#xff0c;即"灌篮高手"。这个版本进行了很多显著的内部改进&#xff0c;最重要的是模版解析的底层逻…

Github 2024-01-08开源项目周报 Top14

根据Github Trendings的统计&#xff0c;本周(2024-01-08统计)共有14个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5TypeScript项目3C项目2Dart项目1QML项目1Go项目1Shell项目1Rust项目1JavaScript项目1C#项目1 免费…

Mockito+junit5搞定单元测试

目录 一、简介1.1 单元测试的特点1.2 Mock类框架的使用场景1.3 常见的Mock框架1.3.1 Mockito1.3.2 EasyMock1.3.3 PowerMock1.3.4 Testable1.3.5 比较 二、Mockito的使用2.1 导入pom文件2.2 mock对象和spy对象2.3 初始化mock/spy对象的方式2.4 参数匹配2.5 方法插桩2.6 InjectM…

javamail 发送邮件报错:Could not connect to SMTP host: smtp.163.com, port: 25 ,问题解决

报错内容 Exception in thread "main" javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 465, response: -1at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1949)at com.sun.mail.smtp.SMTPTransport.prot…

IO进程线程Day5

1> 将互斥机制代码重新实现一遍 #include<myhead.h>char buf[128]; //临界资源pthread_mutex_t mutex; //创建锁资源//分支线程 void* task(void* arg) {while(1){//获取锁资源pthread_mutex_lock(&mutex);printf("这里是分支线程:%s\n",buf);st…

掌握Java并发编程:Lock、Condition与并发集合

在Java并发编程中&#xff0c;正确地处理多线程间的同步和共享资源是非常重要的。Java提供了一些并发编程的工具和类&#xff0c;其中Lock、Condition和并发集合是常用的重要组件。以下是关于它们的详细讨论&#xff1a; Lock&#xff08;锁&#xff09;&#xff1a; Lock是Jav…

ubuntu apt 更换阿里云源

简介&#xff1a;Ubuntu系统的APT&#xff08;Advanced Package Tool&#xff09;是一个包管理器&#xff0c;用于在Ubuntu上安装、卸载和更新软件包。默认情况下&#xff0c;APT会从Ubuntu官方源中下载软件包&#xff0c;但由于网络原因&#xff0c;有时候下载速度较慢。阿里云…

多线程模板应用实现(实践学习笔记)

出处&#xff1a;B站码出名企路 个人笔记&#xff1a;因为是跟着b站的教学视频以及文档初步学习&#xff0c;可能存在诸多的理解有误&#xff0c;对大家仅供借鉴&#xff0c;参考&#xff0c;然后是B站up阳哥的视频&#xff0c;我是跟着他学。大家有兴趣的可以到b站搜索。加油…

JDBC-基本概念

一、概念 引用IBM官网文档的介绍&#xff1a;Java™ database connectivity (JDBC) is the JavaSoft specification of a standard application programming interface (API) that allows Java programs to access database management systems. The JDBC API consists of a s…

CAD安装教程

CAD安装教程 目录 一&#xff0e; 下载CAD二&#xff0e; 安装CAD 一&#xff0e; 下载CAD 如果需要CAD安装包请私信。 二&#xff0e; 安装CAD 解压压缩包AutoCAD2022中文版&#xff0c;以管理员身份运行AutoCAD_2022_Simplified_Chinese_Win_64bit_dlm.sfx。 选择解压路径。…

【sklearn练习】datasets的使用

一、数据集分类 1、fetch类的数据集&#xff1a; 以 "fetch" 开头的数据集&#xff0c;这些数据集通常不包含在 scikit-learn 的标准安装中&#xff0c;需要从远程服务器上下载。这些数据集通常比标准数据集更大&#xff0c;因此在使用它们之前&#xff0c;需要通过…

Spring MVC中@ExceptionHandler注解的智能处理机制——无需显示指定异常类型

概述 在深入探讨Spring MVC框架时&#xff0c;我们经常会遇到异常处理的相关场景。其中&#xff0c;ExceptionHandler注解是一个非常重要的工具&#xff0c;它允许我们声明一个方法来专门处理特定类型的异常。有趣的是&#xff0c;Spring容器具备智能化的异常类型关联功能&…