数组
数组的定义
数组是有序的元素序列,数据呈线性排列的一种数据结构。
表现形式如图:
查找
数组中的数据在内存中是存储在连续空间内,所以每个数据在内存中的位置是可以通过下标算出,我们使用的时候可以直接用下标来访问到指定的数据。
假设arr这个数组的内容是:[25,6,10,15]。当我们想要取到10这个数据的时候,通过arr[2]即可获取。
注意:通过下标访问是根据下标直接指向数据的内存地址,并非通过指针查找。如果通过指针查找,需要花费O(n)的时间,也就是最坏情况有多少元素就要查找几次,而数组这种数据结构根据下标就能直接访问到指定元素,恒定花费的时间只有O(1)。
添加
如果我们想要在arr数组中增加一个元素,比如,增加一个数据100,增加到第2个位置上,也就是现有的数组:[25,6,10,15],我们希望变化成:[25,100,6,10,15]。
首先,应该是数组扩容:
增加需要扩充的容量,扩充的容量空间此时存在于数组的尾部。
由于第二个位置是新数据需要的,所以下标1、2、3的数据都往后移动一格,形成如下状态:
然后再在arr[1]的位置上写入100
删除
反之,如果我们想把100删掉
那么首先清除arr[1]中的数据:
然后后面的数据一个一个挨着往空位移动,直到把空位移动到末尾。
最后再删除掉多余的空间
至此,100这个数据在数组中删除完成。
效率
在开始我们已经了解了数组的访问是非常快的,不需要数据遍历,用下标的就能直接定位到数据的内存地址。
而在数组中添加新数据时,就需要把目标位置后面的数据全部都挨着移开,所以添加数据的时间复杂度为O(n),在数组中删除数据也是一样。
简而言之,数组的访问快,增删慢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构