数据结构之数组

数组 :

  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开始的
写到这个想到数据库的分页也不就是这个理吗?这个得想想。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值