数组(Array)
- 是一种线性表数据结构
- 它用一组连续的内存空间,来存储数据
- 根据下标随机访问数组元素
- 因为有连续的内存空间,那么目标地址 = 首地址+下标*数据类型大小
- a[i]_address = base_address + i * data_type_size
这样就导致数组的读改超快,删增超慢
实际应用
- 优化点
- 将多次这种位移集中起来,比如删除前三位,就避免一次一次的删除
静态数组,提前确定了好了一块儿连续的内存空间的
- 有边界的问题,比如在c语言中,需要做边界检查
- Java有容器类ArrayList
- ArrayList将很多数据操作封装了,比如删除数据时,需要搬移其他数据
- 支持动态扩容
- 内存申请
- 数据搬移
- 比较耗时
- 优化点:能提前确定大小的时候,提前确定大小,暂时不知道javascript这里如何实现的
上面的观点来自于:极客时间版权所有: https://time.geekbang.org/column/article/40961
JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可 能是整数。然而,这些数字索引在内部被转换为字符串类型,这是因为 JavaScript 对象中 的属性名必须是字符串。数组在 JavaScript 中只是一种特殊的对象,所以效率上不如其他 语言中的数组高。
创建数组的几种方式。哪种方式最好?
大多数 JavaScript 专家推荐使用 []
操作符,和使用 Array 的构造函数相比,这种方式被认为效率更高(具体参见 O’Reilly 出 版的 JavaScript: The Definitive Guide 和 JavaScript: The Good Parts 这两本书)。
JavaScript 数组不是连续(contiguous)的,其实现类似哈希映射(hash-maps)或字典(dictionaries)
这里我可能关注偏了,某些细节上的性能损失,至少在前端可以忽略,除非是去做底层框架,所以可以暂时不用管array的底层实现