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)
————————————————

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自动生成表结构screw

采用的组件 screw 操作流程&#xff1a; 1、新建springboot 项目 2、引入相关的依赖 <!-- screw核心 --><dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</artifactId><version>1.0.4</version><…

从古代到现代:现代气体检测发展及其方法探究

在人类的发展历程中&#xff0c;气体检测一直是一个关键的领域。无论是古代还是现代&#xff0c;人们都需要检测气体以保障生命安全和生产活动的正常进行。随着科技的不断进步&#xff0c;气体检测技术也经历了从古代到现代的巨大变革&#xff0c;现代气体检测方法和古代气体检…

经常戴耳机有什么危害呢?一文读懂长时间使用耳机都有哪些危害

经常佩戴耳机可能会出现滋生细菌、引起炎症反应、损伤听力等危害。 1、滋生细菌&#xff1a;长时间戴耳机&#xff0c;会导致耳道堵塞&#xff0c;从而导致耳内潮湿&#xff0c;容易滋生细菌。 2、引起炎症反应&#xff1a;长时间戴耳机&#xff0c;会对耳道口造成机械性的压…

HttpRunner自动化之响应中文乱码处理

响应中文乱码&#xff1a; 当调用接口&#xff0c;响应正文返回的中文是乱码时&#xff0c;一般是响应正文的编码格式不为 utf-8 导致&#xff0c;此时需要根据实际的编码格式处理 示例&#xff1a; 图1中 extract 提取title标题&#xff0c;output 输出 title 变量值&#x…

景联文科技GPT教育题库:AI教育大模型的强大数据引擎

GPT-4发布后&#xff0c;美国奥数队总教练、卡耐基梅隆大学数学系教授罗博认为&#xff0c;这个几乎是用“刷题”方式喂大的AI教育大模型的到来&#xff0c;意味着人类的刷题时代即将退出历史舞台。 未来教育将更加注重学生的个性化需求和多元化发展&#xff0c;借助GPT和AI教育…

基于ssm的网上购物平台设计+jsp论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

酷开科技 | 酷开系统9.2,开启个性化时代

现代人&#xff0c;总喜欢不走寻常路&#xff0c;以彰显自己的不同。酷开系统的个性化推荐就能满足你的这类需求&#xff0c;既能给你想要的内容&#xff0c;又能给你与众不同的体验&#xff01; 想听音乐了&#xff1f;打开酷开系统音乐频道&#xff0c;随机播放为你推荐的歌曲…

OSPF基本概念与配置(完整版)

目录 路由分类 OSPF概述 一、OSPF的工作过程 二、报文类型 三、OSPF区域 四、OSPF单区域实验案例 拓扑 需求 配置步骤 配置命令 五、OSPF邻居表解析 六、OSPF路由角色 七、OSPF多区域实验案例 拓扑 需求 配置步骤 配置命令 八、邻居建立失败的原因(已广播型网络…

生成式AI:开发效率的提升者

文章目录 摘要引言应用方向应用示例1. 自动化代码生成2. 智能样式生成3. 自动化测试与调试 总结&#x1f636; 写在结尾 摘要 生成式AI作为一种新兴技术&#xff0c;正在迅速改变软件开发的方式。通过自动化和优化开发流程&#xff0c;它可以帮助开发人员更快地生成代码、测试…

springboot项目 java -jar xxx.jar 没有主清单属性解决方法

1.在pom文件中添加如下 <plugins><!--解决SpringBoot打包成jar后运行提示没有主清单属性--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork…

Android中的Intent

一.显式Intent 显示Intent是明确目标Activity的类名 1. 通过Intent(Context packageContext, Class<?> cls)构造方法 2.通过Intent的setComponent()方法 3.通过Intent的setClass/setClassName方法 通过Intent(Context packageContext, Class<?> cls)构造方法 通…

TikTok被限流怎么办?破解0播放方法在这!

Tiktok是目前增长较快的社交平台&#xff0c;也是中外年轻一代首选的社交平台&#xff0c;许多出海品牌已经看到了TikTok营销的潜力&#xff0c;专注于通过视频、电商入驻来加入TikTok这片蓝海&#xff0c;加深品牌影响力&#xff0c;获得变现。 然而TikTok新手往往都会遇到一…

2023春季李宏毅机器学习笔记 05 :机器如何生成图像

资料 课程主页&#xff1a;https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub&#xff1a;https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程&#xff1a;https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、图像生成常见模型…

使用 Swagger 导入 Postman: 最佳实践与步骤解析

Swagger和 Postman 都是常用的 API 测试工具&#xff0c;都有各自的优势。为了结合两者的优点&#xff0c;我们可以考虑将 Swagger 中的 API 定义导入到 Postman 中去&#xff0c;这样就可以利用 Postman 更强大的测试功能来测试 Swagger 定义的接口。 下面将以 Swagger Petst…

【本科生通信原理】【实验报告】【北京航空航天大学】实验一:通信原理初步

一、实验目的&#xff1a; 熟悉 MATLAB开发环境、掌握 MATLAB基本运算操作&#xff1b;熟悉和了解 MATLAB图形绘制基本指令&#xff1b;熟悉使用 MATLAB分析信号频谱的过程&#xff1b;掌握加性白高斯噪声信道模型 二、实验内容&#xff1a; 三、实验程序&#xff1a; 1、 f…

Linux编辑器vim的基本操作(详解及GIF演示)

&#x1f4ab;Linux开发工具vim 在我们初学某门语言时可能接触过使用记事本编辑代码&#xff0c;在之后我们开始接触visual studio等集成开发环境&#xff0c;对于这种基于图形化界面的编辑工具我们可以说已经十分熟悉了&#xff0c;那么接下来我们就来介绍一下Linux中的编辑器…

【linux学习】linux概述

操作系统主要的功能有两个部分&#xff0c;一是更有效率的控制计算机硬件资源&#xff08;主要通过核心来控制&#xff09;&#xff0c;二是为程序设计师提供更容易开发软件的环境&#xff08;系统呼叫提供软件开发环境&#xff09;。linux就是一套操作系统&#xff0c;linux就…

【数据结构】二叉树(二)——顺序结构

前言 本篇博客讲解数组实现二叉树的顺序结构 文章目录 一、二叉树的顺序结构及实现1.1 二叉树的顺序结构1.2 堆的概念1.3 堆的实现1.3.1 初始化堆1.3.2 向堆中插入元素1.3.3 从堆顶删除1.3.4 其他操作1.3.5 完整代码Heap.hHeap.c 1.4 堆的应用1.4.1 堆排序1.4.2 TOP-K问题 一、…

Ubuntu18.04 升级Ubuntu20.04

文章目录 背景升级方法遇到的问题 背景 因项目环境需要&#xff0c;欲将Ubuntu18.04升级至Ubuntu20.04&#xff0c;参考网上其他小伙伴的方法&#xff0c;也遇到了一个问题&#xff0c;特此记录一下&#xff0c;希望能帮助其他有同样问题的小伙伴。 升级方法 参考&#xff1a…

【React系列】Hook(一)基本使用

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 认识hook 1.1. 为什么需要hook Hook 是 React 16.8 的新增特性&#xff0c;它可以让我们在不编写class的情况下…