数组

定义

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

特性

支持随机访问

根据下标随机访问的时间复杂度为O(1)

缺陷

删除或者插入元素为了保证内存连续性,需要做大量的数据搬移工作。

插入优化技巧

  1. 如果数组是又序的,那么插入到K位置时,就只能搬移K后面的元素依次向后移动一位。时间复杂度为 O(n)。
  2. 对与无序数组,仅做存储作用的,插入新元素到K位置,可以先将K位置的元素移动到数组末尾位置,然后空出K位置,在插入新元素。如此技巧,会把时间复杂度降到O(1)。

删除优化技巧

  1. 单次删除操作并不移动数据,允许存在内存空洞,仅标记元素被删除标识;当多次删除后。内存不足时,统一触发一次数据搬移动作,以此来批量操作,提高删除效率。
  2. jvm垃圾回收就是此操作。

时间复杂度

插入和删除时间复杂,在数据尾部插入或者删除数据,不需要移动数据,复杂度为O(1)。在k位置插入或者删除数据需要移动n-k个元素,时间复杂度为O(n-k)。所以通过平均法得出O(n)。

注意点

  1. 防止数组越界访问。

动态扩容

数组在容量不够情况下,会从新申请更大一块空间,把原数组的内容全部迁移过去,因为要内存申请和数据迁移耗时比较大,因此在得知数据长度情况,直接带长度定义数组比较好。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值