二.数据结构——数组

数组的定义

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

优点

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

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

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

缺点

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

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

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

js内数组结构

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 环境部署RabbitMQ

1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一:在线拉取 docker pull rabbitmq:3-management 方式二:从本地加载(本文章带有mq安装包) docker load -i mq.tar 1.2.安装MQ 执行下面的命令来运行…

CEN02 - Installing Python on Your Computer

文章目录 I. IntroductionII. Installing Python1. Download the latest version of Python from the official website2. Run the installer and follow the installation wizard3. Ensure that the "Add Python.exe to PATH" checkbox is checked for easier comma…

【华为OD题库-071】字符串筛选排序-java

题目 输入一个由n个大小写字母组成的字符串,按照Ascii码值从小到大的排序规则,查找字符串一中第k个最小ascii码值的字母(k> 1),输出该字母所在字符串的位置索引(字符串的第一个字符位置索引为0)。 k如果大于字符串长度,则输出最…

阻碍“元宇宙”游戏行业发展的最大瓶颈是什么?

很显然,我们现在还没看到真正的“元宇宙”产品,在3-5年内也不太可能看到这样的产品。按照米哈游CEO蔡浩宇的说法,2030年希望建成一个“上亿人愿意生活在其中的虚拟世界”,那也是八年以后的事情了。 原因很简单:技术不成…

如何在任何STM32上面安装micro_ros

就我知道的:micro-ros只能在特定的昂贵的开发板上面运行,但是偶然发现了这个文章,似乎提供了一个全新的方式来在ros2和单片机之间通讯,如果能够这样肯定也能够提高效率,但即使不行,使用串口库也应该比较简单…

【开题报告】基于微信小程序的个人健康监测系统的设计与实现

1.选题背景 随着人们生活水平的提高和健康意识的增强,个人健康管理越来越受到重视。然而,传统的健康管理方式存在信息不便捷、数据记录困难、监测分析不及时等问题。随着智能手机和移动互联网的普及,微信作为中国最大的社交平台之一&#xf…

机械设备展示预约小程序作业是什么

机械产品具备较高的市场需求度,由于具备批发和高价格属性,所以除了线下公司/门店外,线上主要以展示、咨询、获取线索转化等为主,当然线上直接销售也有很高的直接转化率。 那么商家通过【雨科】平台搭建机械设备展示预约小程序能实…

无需公网IP实现公网远程访问本地WebDAV服务

windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】 文章目录 windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访…

【虚拟机磁盘扩容】 centos7把/dev/sda的磁盘空间分给根目录

一、修改硬盘大小 关闭虚拟机→设置→硬盘→修改到自己需要的磁盘大小 二、查看根目录当前磁盘使用情况统计 df -h 注:虽然在第1步已经设置过新的磁盘大小为50G,但是这里明显可以看出总磁盘大小依旧是之前的20G,这就涉及到分区问题。 三、…

go基础语法10问(1)

1.使用值为 nil 的 slice、map会发生啥 允许对值为 nil 的 slice 添加元素,但对值为 nil 的 map 添加元素,则会造成运行时 panic。 // map 错误示例 func main() {var m map[string]intm["one"] 1 // error: panic: assignment to entry i…

物联网安全芯片ACL16 采用 32 位内核,片内集成多种安全密码模块 且低成本、低功耗

ACL16 芯片是研制的一款32 位的安全芯片,专门面向低成本、低功耗的应用领域, 特别针对各类 USB KEY 和安全 SE 等市场提供完善而有竞争力的解决方案。芯片采用 32 位内核,片内集成多种安全密码模块,包括SM1、 SM2、SM3、 SM4 算法…

【Linux】less 命令使用

less命令 less 与 more 类似。 less是一个非常常用的文本查看工具,它可以用于查看任意大小的文本文件,支持滚动翻页、搜索、标记等功能。在本文中,我们将详细介绍less命令的用法、参数和实例,并对其背后的原理和相关技术进行简要…

thinkphp结合rabbitmq的使用案例

ThinkPHP是一款流行的PHP框架,RabbitMQ是一种消息中间件,在Web应用程序中使用它可以帮助处理异步任务和分发任务等。下面是一个ThinkPHP结合RabbitMQ的使用案例: 安装RabbitMQ 首先需要安装RabbitMQ。可以使用官方的RabbitMQ安装程序或者使…

基于深度学习YoloV8的火焰烟雾检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介简介YoloV8模型火焰烟雾检测系统模型训练实时检测 应用领域 二、功能三、系统四. 总结 一项目简介 # 基于深度学习YoloV8的火焰烟雾检测系统介绍 简介 深…

MSSQ 程序集使用方法

1.C# 写一个程序 1.1新建一个项目【类库【.Net FrameWork】 1.2编写代码 删除 namespace ApiSQLClass { } 代码如下:【具体调用API模式根据具体编写】 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.…

软包电池市场分析:中国市场现状及未来发展趋势

根据封装方式和形状不同,动力电池可分为方形电池、软包电池和圆柱电池。软包锂电池所用的关键材料(正极材料、负极材料、电解液及隔膜)与传统的钢壳、铝壳锂电池之间的区别不大,最大的不同之处在于软包电池需要铝塑膜,这也是软包锂离子电池中…

React 表单组件实现

一、介绍 本文将会基于react实现表单的功能,包括表单提交和跳转、表单验证、动态表单元素、动态内容加载。 二、使用教程 1.表单提交功能 export default class FormSubmit extends React.PureComponent{state {name: ""}handleNameChange evt > …

扭矩系数和摩擦系数应该关注哪一个?——SunTorque智能扭矩系统

螺栓,作为设备的主要连接方式之一,应用在多个关键部位,是关系到整个设备的安全可靠运行的保障。例如,在风电机组中高强度螺栓就是为了保证较高的预紧力;但是,螺栓的质量、装配方法、拧紧工具等等都会影响到…

class034 链表高频题目和必备技巧【算法】

class034 链表高频题目和必备技巧【算法】 code1 160. 相交链表 // 返回两个无环链表相交的第一个节点 // 测试链接 : https://leetcode.cn/problems/intersection-of-two-linked-lists/ 容器法:HashSet记录list1,遍历list2,看是否包含在Ha…

从零开始学Python网络编程:轻松搭建服务器和客户端

Python网络编程的基础知识是成为一名全面的Python开发者的关键一步。网络编程使我们能够创建各种类型的网络应用程序,从简单的客户端/服务器应用到复杂的Web应用和网络爬虫。 在本文中,我将会学习到Python网络编程的基础概念,包括套接字、服…