数组

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

    线性:数据排成相一条线一样的结构,每个线性表上的数据最多只有前后两个方向。

  2. 连续的内存空间和相同类型的数据。

    由于连续的内存空间,数组支持随机访问;但插入和删除为了保证连续,就需要进行大量数据搬移。

    随机访问公式:a[i] = base_address + i * data_type_size。

  3. 插入:

    在末尾插入:O(1),在开头插入,因为涉及到元素移动O(n),平均O(n)。

    1. 有序:平均O(n)。

    2. 无序:

      技巧:我们可以将要插入的位置的元素替换为当前元素,再将要插入位置的元素插入到线性表末尾。(如果不涉及数组的扩容,时间复杂度为O(1),否则为O(n))。

      例如:[a, b, c, d, e].

      在位置2插入n,则为[a, b, n, d, e, c].

  4. 删除

    如果我们要删除第k个位置的数据,为了内存的连续性,也需要搬移数据。

    和插入类似,删除末尾O(1),删除开头为O(n),平均O(n)。

    技巧:我们可以将删除后的数据打标记为已删除,这样,等到一段时间后,再批量删除线性表中的数据,这样,元素的移动次数可能会变少,效率就会提升。

    例如:[a, b, c, d, e, f]

    一段时间内,相继删除了a, b, c。此时进行真正删除操作[d, e, f].

    def这三个元素就会只进行一次移动,而不是三次。

  5. 容器

    1. ArrayList,如果能实现确定数组大小,最好事先指定数据大小。
    2. ArrayList无法存储基本类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值