线性数据结构也称为一维数据结构,包含一维数组和链表
线性的数据结构强调的是存储与顺序
一维数组:
image.png
在通常编程时,我们不注意给数组指定长度,JS引擎就会自动给数组扩容,但是扩容的过程非常消耗性能。
当我们想在数组的最后一位添加数据6,这个过程并不是单纯的创建出一个空间拼到数组的末尾,而是会重新创建一个长度相较于之前数组更长的空数组,再把之前数组的内容复制到新创的数组中,最后添加新数据。
扩容的过程又分配空间又赋值数据,所以扩容的操作消耗性能。
扩容的过程:
1.创建长度更长的新数组
image.png
2.复制之前数组的数据
image.png
3.添加新数据
image.png
扩容的过程消耗性能,所以在创建数组时可以预估长度给数组分配空间。
一维数组的特征
1.物理空间上的存储是连续的;
2.底层的数组长度是不可变的。
3.数组的变量名指向数组第一个元素的位置。
从特征出发,介绍一维数组的优点和缺点
优点:查询性能好,指定查询某个位置。
缺点:
1.因为空间必须是连续的,当系统的空间碎片较多的时候,容易存不下。
2.数组的长度是固定的,不宜做添加和删除的操作。
优点说明:
数组的方括号[ ]表示存储地址的偏移
操作系统中有说明,通过偏移量查询数据性能最好,所以根据一维数组的第3个特征(数组的变量名指向数组的首地址),以首地址+偏移量,就能快速找出数据
缺点说明:
1.根据一维数组的第一个特征,由于数组的存储是连续的,当系统存在较多的空间碎片时,导致系统看上去有空间存储数组,但是没有一块连续的空间存储数组,这时系统就要整理空间碎片,非常消耗资源。
2.由于数组的长度固定,添加数据就是扩容的过程,而删除数据也不是单纯的将该数据删除而已,假如要删除数组中的第三位数据
删除a[2]的数据
image.png
1.首先将该数据删除
image.png
2.数组的存储是连续的,所以a[2]不可能是空的,那么就要把后面的数据往前移动
image.png
3.删除数组最后一位的空间
image.png
所以删除操作和扩容操作都是非常消耗资源的。
网友评论