数组(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 中只是一种特殊的对象,所以效率上不如其他 语言中的数组高。

    创建数组的几种方式。哪种方式最好?

    1. 大多数 JavaScript 专家推荐使用 []

    操作符,和使用 Array 的构造函数相比,这种方式被认为效率更高(具体参见 O’Reilly 出 版的 JavaScript: The Definitive Guide JavaScript: The Good Parts 这两本书)。

    JavaScript 数组不是连续(contiguous)的,其实现类似哈希映射(hash-maps)或字典(dictionaries)

    这里我可能关注偏了,某些细节上的性能损失,至少在前端可以忽略,除非是去做底层框架,所以可以暂时不用管array的底层实现