面试必备——数据结构与算法(二)

一维数据结构(线性数据结构)—— 数组

这个一维,和我们现实世界里的一维是一样的,一维是线,二维是面,三维是立方体,四维是空间

线性数据结构强调存储于顺序,话句话说,就是把一堆数据线性的存储起来。
在这里插入图片描述

1. 数组特性:

1)存储在物理空间上是连续的
2)底层的数组长度是固定的(数组定长)

数组定长?在前端中,数组并不是定长的呀,我定义一个数组,可以随便往数组里面添加数据,何来的定长呢?
  其实,是js引擎自动将数组进行了扩容处理,数组的底层是定长的!注意!!扩容的过程是消耗性能的! 好的程序员,会提前声明好数组可能的最大长度,尽量不会出现数组的扩容情况。
  
为什么扩容会消耗性能呢?
  如上图所示,假如数组初始化长度刚好为8,这时又来一个数字9,真的只是在后面扩容出来一位装9吗?,其实并不是,因为数组是定长的,也就是不可变的,所以并不能改变原数组,而是重新分配一块内存空间来存储更长的数组,而且数组长度不一定为9,因为他不知道你是否还会继续添加。如下图所示:
在这里插入图片描述
  可以看出,扩容后的数组不仅申请了新的内存空间,而且还将原来的数组中的数据一个个的复制了一遍,然后再添加新的数据。因此,非常耗费性能。

3)数组的引用,指向的是数组中第一个元素的位置
  如果说我们想使用数组的第二项的数据,则用arr[1]来获取,这个[1]其实是数组指针的偏移量,利用偏移量来查询数组的第几项,这样利用偏移查询某个数据是速度最快的

2. 数组优缺点

优点: 查询性能好
缺点: 1)因为空间必须连续,所以数组比较大,容易存不下。

并不是说,还剩1G的内存空间,那么200M的数组一定存的下。这是不一定的,因为存储数组的内存空间必须是连续的,所以如果这1G的内存空间都是比较零散的(空间碎片),没有这么大的连续的空间时,那么就会有存储不下的情况。这时,系统则会整理空间,非常耗费性能!

2)因为数组的长度是固定的,所以数组的内容难以增加和删除

数组的增加我们上面解释了,那么数组的删除为什么也会耗费性能呢?如果说把上面的数组的第二项删掉,那么第二项就空了么?并不是,他会把后面的项一个一个的往前移。虽然说不用扩容数组了,但是他要移动删除数据后面的所有数据,因此代价也是非常大的。

关于数组的部分我们就先分享到这里啦,下班儿下班儿~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值