数据结构——链表

简介

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


数组如何实现随机访问

计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据,当计算机需要随机访问数组中的某个元素时,它会通过下面的寻址公式,计算出该元素存储的内存地址。

公式如下:

a[i]_address = base_address + i * data_type_size
// data_type_size 表示数组中每个元素的大小,比如:当数组类型为 int 时,data_type_size 就为 4

优化数组的插入和删除

插入

假设数组 a[10] 中存储了五个元素如下:1,2,3,4,5。现在要将元素 8 插入到 3 的位置,我们只需要将 3 放到 a[5] 然后再将 a[2] 赋值为 8 即可。这样一来,数组插入一个元素的时间复杂度就会变为 O(1)。

前提:该数组不需要排序

删除

假设数组 a[10] 中存储了五个元素如下:1,2,3,4,5。现在要将 1,2 删除,我们不需要移动别的元素补全被删除的元素,而是换另一种方法,将删除的元素标记起来,在数组新增元素的时候,判断数组的空间是否足够,当数组空间不足时,再把标记删除的元素删掉,这样一来,时间复杂度就变为O(1)。


数组和容器的对比

拿 ArrayList 来举例, ArrayList 无法存储基本类型,比如 int、long,需要封装为 Interger、Long 类,而且封装过程中的「自动装箱」和「自动拆箱」会消耗一定的性能。


数组的使用场景

  1. 如果对数据大小有个大概的了解,而且对数组的操作非常简单,也可以直接使用数组。
  2. 对于一般的系统业务开发,可以直接使用容器,毕竟对性能要求不高,但如果是针对底层的开发,需要将性能优化到极致,则推荐使用数组。

欢迎关注,本号将持续更新本人编程路上的各种见闻。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值