数组

要了解数组前,先来了解下线性表和非线性表的概念。

线性表

所谓的线性表指的是像一条线一样的数据结构,方向上只能沿着线两边扩展,常见的线性表的有数组、链表、队列、栈。

非线性表

就是数据的表达形式可以不往水平进行表现,常见的非线性表有二叉树、堆、图等。

数组

数组是一种线性表的数据结构,它用一组连续的内存空间,来存储一组具有相同的数据类型的数据。

通过上面的描述其实我们可以得到数组的结构以及由结构决定的一些特性:
1、随机访问(杀手锏)
因为数组是一组连续的内存空间,通过寻址公式可以迅速的访问指定下标的数据a[i]_address = base_address + i * data_size
2、低效的插入和删除
为了保证连续的内存空间,插入和删除会涉及到数据的迁移

插入删除的优化手段

每种实现都是结合业务场景来确定方案的,插入如果对数据的顺序要求并不严格,我们只需将item放到数组的最后面,如果是放入指定位置的话那么先讲原先指定位置的搬迁到最末,然后数据放上去

标记清除垃圾算法(JVM类似)
删除因为每次都要涉及到指定的所有后续元素的地址变更,因此对于频繁的删除应用,我们可以先将位置下的先标识为删除,当所有操作完成后,再将所有标识为删除的元素进行删除操作,或者在数组内存空间不够的情况下进行真实删除。

容器包装的数组的很多细节封装起来,比如前面所提到的数据插入以及删除数据需要搬移其他数据等等,此外,它还有一个优势就是支持速度的动态扩容。一般业务的实现基本使用容器,如果偏向于底层的设计需要更高的性能一般使用数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值