二.数据结构——数组

数组的定义

  1. 是一种由相同类型的元素组成的数据结构。
  2. 它在内存中连续存储着一系列的元素,并且通过每个元素的索引来访问数组中的特定元素。
  3. 数组的容量也就是长度会在一开始就被确定

优点

  1. 快速访问:由于数组的元素被存储在连续的内存位置中,因此可以通过下标快速访问数组的任意元素。这使得数组的访问速度非常快,特别是在对元素进行操作时,例如插入、删除或更新元素。

  2. 高效的内存利用:由于数组中的元素存储在连续的内存位置中,因此数组的内存利用率通常比链表等其他数据结构更高。

  3. 简单易用:数组是一种基本数据结构,易于使用和编写。大多数编程语言都提供了原生的数组类型和下标访问操作,这使得数组的使用和操作非常简单。

缺点

  1. 不易扩展:在大多数编程语言中,数组的大小是固定的。如果需要添加更多元素,通常需要重建一个更大的数组,将原始数组中的元素复制到新数组中。这可能会导致性能问题和额外的内存消耗。

  2. 插入和删除操作较慢:向数组中插入或删除元素时,需要将后面的元素全部移动,这可能会导致性能下降,特别是在需要扩展数组大小时更为明显。
    在这里插入图片描述

  3. 不适合存储大型数据集:由于数组在内存中连续存储,因此在存储大型数据集时可能会导致内存问题。大型数组可能会超出系统内存的限制而无法创建。

js内数组结构

了解了数组的定义后,我们就会发现js里面的数组是极为特殊的。它即可以存放多种数据类型,也可以随时扩充容量,貌似完全不能够称作为数组这种数据结构。

实现原理
事实上,js里面的数组可以看作是使用哈希表实现的一种特殊对象。
哈希表是一种以键值对形式存储数据的数据结构,其中键通过哈希函数转换为对应的索引,然后将值存储在数组的相应位置上。通过哈希表的方式,JavaScript 数组内部实际上是一个散列表,每个元素通过哈希函数映射到不同的索引位置。

特点
由于 JavaScript 中的数组是通过对象来实现的,因此它具有一些对象的特点。例如,可以在数组中存储任意类型的值,如数字、字符串、对象、函数等。数组还可以包含其他数组或对象,形成多维数组或者复杂的数据结构。

另一个重要的特点是,由于数组本质上是一个对象,它继承了对象的一些方法和属性。例如,可以使用 Object.keys() 来获取数组中的键名,使用 Object.values() 来获取数组中的值,并使用 Object.hasOwnProperty() 来判断数组中是否存在某个键。

缺点
然而,需要注意的是,与传统意义上的数组相比,JavaScript 中的数组具有一些缺点。由于底层实现的原因,JavaScript 数组在执行某些操作时可能会比较慢。例如,插入或删除元素时,需要重新分配内存空间并复制元素,这可能会导致较慢的性能。此外,由于数组的元素并非连续存储,随机访问元素的性能也可能相对较低。

总的来说,js的数组可以看作是披着数组皮的对象,但是因为底层api的封装支撑,让他有了数组的一些特性,甚至比原本的数组类型功能更强大。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 08:56:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 08:56:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 08:56:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 08:56:05       20 阅读

热门阅读

  1. vue3+ts自定义插件

    2023-12-07 08:56:05       35 阅读
  2. Nginx实现(缓冲区)

    2023-12-07 08:56:05       37 阅读
  3. go - 计算CIDR的主机数量

    2023-12-07 08:56:05       42 阅读
  4. RefCell 数据类型

    2023-12-07 08:56:05       31 阅读
  5. Linux下打包Qt-使用linuxDeployQt+appimageTool

    2023-12-07 08:56:05       31 阅读
  6. Ubuntu下应用软件安装

    2023-12-07 08:56:05       45 阅读
  7. Ubuntu20.24 安装ecCodes,包括 tar.gz 和 python(笔记)

    2023-12-07 08:56:05       39 阅读
  8. 使用lxml解析本地html文件报错?

    2023-12-07 08:56:05       34 阅读
  9. Docker build 命令

    2023-12-07 08:56:05       33 阅读
  10. SCI论文——respectively用法

    2023-12-07 08:56:05       34 阅读
  11. 利用 Python进行数据分析实验(一)

    2023-12-07 08:56:05       33 阅读