前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构之数组

数据结构之数组

作者头像
袁新栋-jeff.yuan
发布2022-05-05 14:42:17
1940
发布2022-05-05 14:42:17
举报

数组 :

  1. 线性结构 线性结构也就是一列数据,相互串联起来,除了此处说的数组外还有队列,栈,链表,而非线性结构的数据那就是二叉树还有就是图结构
  2. 连续的存储空间,相同类型的数据 数组的连续的存储空间让数组有了我们常说的特性, 随机访问。 它可以根据其数组下标来直接访问其数据所在位置对应的值,不得不想想他是怎么直接去访问的呢? 于是我们就想想底层,当我们创建一个数组对象的时候,则计算机则会给他分配一个连续的存储空间,并且每一块存储单元都会被分配一个地址,当你要去读区这个数据的时候那就是先去得到这个地址于是就有一个 寻址公式: a[i]_adress =base_adress +i*date_type_size //基础位置+位于初始位置的第几个位置*数组中数据类型的大小 刚刚说了连续的存储空间的好处有利定有弊,坏处就是在给数组插入数据的时候不能快速插入,每一次插删除入都需要移动后面储存位置所以说数组的插入和删除是很浪费性能的。 插入和删除的时间复杂度为O(n)

在 java的API 里面有封装好的容器,那就是ArrayList,那么容器和数组比的话谁更有优势呢? 容器 也就是将数组的细节操作还有数据类型封装起来,还有就是它内部是可以动态扩容的(每次动态扩容的大小为其原来的1.5倍)说到动态扩容会涉及到内存的申请所一说在创建容器数组的时候可以固定给一个值(在知道最大的纯储量的的时候且符合业务场景) 那么如果直接使用数组的话肯定会规避掉一些很细节的问题比如说使用容器内存浪费,还有就是容器是不能为存储值类型的如int,long等 在看专栏的时候有一个问题也就是为什么数组下标的起始值为 0而不为1 ? 数组的计算公式为 a[i]_adress =base_adress +i*date_type_size 从数组的内存模型来看其下标也就是其偏移(offset) 如果用a来表示数组的首地址,那么a[0]也就是偏移量 那么也就是a[k]表示k 个 type_size的位置 ,那么如果从1开始那么还得减1 那么计算地址公式就得多算一步,对于底层来说这一步是很浪费性能的。所以说是从0开始的 写到这个想到数据库的分页也不就是这个理吗?这个得想想。。。。。。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档