数组一般定义:它们是内存中一段连续的存储空间,用来存储相同类型的数据。
- 线性表
- 连续的内存空间和相同类型的数据
所以看看JS中的数组
稀疏数组和非稀疏数组
数组中元素的索引是连续的就是非稀疏数组。
理解引擎会为非稀疏数组分配一个连续的内存空间。寻址的时候通过第一个元素的地址,然后加上下标乘上每个元素的空间来快速计算出内存地址。
稀疏的数组会通过映射的方式,比如链表来实现。
连续的数组VS链表 访问数据的差异
- 它们插入、删除、随机访问操作的时间复杂度正好相反。
- 数组是连续的内容空间可以借助CPU的缓存机制,比较快的读取数据。缺点是大小固定。
- 链表支持动态扩容。数组的动态扩容需要拷贝数据。
- 链表需要更多的空间去存指针,频繁操作也会触发垃圾回收。
引入类型化数组 于是我们就有了ArrayBuffer WebGL需要高效处理二进制数据所以需要高性能、高效率的类型化数组。
于是便有了处理ArrayBuffer的视图,比如:Int8Array,Uint8Array,Int16Array,Uint16Array…
var buffer = new ArrayBuffer(8);
var view = new Int32Array(buffer);
view[0] = 100;
所以JS中的数组分为连续和不连续的,而且后面引入了类型化数组,提高效率。
欢迎大家指正~