数据结构之数组

算法这个专栏主要是基于js来写的,意与学习前端的同学分享自己的学习成果。

前端的小伙伴们,是不是也有这样的感觉。我们前端js里面的数组好像是不定长的呀!我们感觉在js中数组是不定长的,实际上,它的底层是定长的。只不过它的长度达到一定长度之后,js引擎帮我们实现自动扩容了。
那么,js引擎帮我们向操作系统去申请空间来实现扩容,那么我们可以不管了吗?
不行,扩容的过程是会消耗性能的。
好的程序员,在使用数组前,可以先判断使用的数组要多长,事先打好提前量,在使用数组的过程中不会出现扩容的情况。

扩容是怎么实现的?
(内存的分配都是操作系统给分配的。如果我们就问操作系统要一块指定位置的空间,它不一定会给我们;我要问他要一块连续的多长的空间,它是会给我们的)
如果我们数组长度为8个,要在添加一个数据,它可能就会创建一个新的长度为16的数组(操作系统的引擎会打好提前量,说你8个长度的存不下了,就多给你一点,看看你能不能存下,所以可能会自动帮我们划分一个16的长度),然后把我们原先的那8个数据给复制过来,(这个过程又分配内存,又复制数据,消耗性能),然后在把第9给数给添加进去。
所以,我们在使用数组时,最好时先预估要多长的数组。

数组的特性:
1.存储在物理空间上时连续的。
2.底层的数组长度是不可变的。(js中的数组是因为js引擎给做了优化)
3.数组的变量,指向了数组第一个元素的位置

数组的优点:
1.查询数据性能好。指向查询某个位置,没有任何数据结构可以和数组相比(a[1], a[4]……)

数组的缺点:
1.因为空间必须得是连续的,所以如果数组比较大,当系统的空间碎片较多的时候,容易存不下。(所以,声明数组时要避免数组太大)
空间碎片(这里不展开讲)
2.因为数组的长度是固定的,所以数组的内容难以被添加和删除(被删除的数据的那块空间,由后面的数据往前移来填补,所以也是会消耗性能的)

数组和链表的优缺点是互补的。
下一篇博客我们就来讲一下链表

感谢各位同学的阅读,如果有错误的地方,请指出,我好及时更正,使更多同学可以更好理解学习。
有不懂或者是其他想法,请在评论区留言,一定回复,谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值