JavaScript真的需要链表吗?
javaScript可以原生提供的数据类型的确有限,但是并不代表不需要。
从一开始只有Object、Array到现在增加的Map和Set也确实证明前端也在不断发展自己的数据结构。
下边就有些没有的数据结构进行模拟实现。

java中链表的必要性
Java内部有自己的链表结构的数据类型LinkedList
为什么要有链表这种存储结构呢?
因为在java中,java数组存在弊端,ArrayList倒是解决了部分弊端(支持动态自动扩容)。
但是 LinkedList则以链表的形式进行存储,会有其它好处,以下是对比
| 链表 | 数组 | |
|---|---|---|
| 内存占用 | 不需要连续的内存空间 | 需要连续的内存空间 |
| 大小可变 | 链表的大小可动态变化 | 数组大小固定,不能动态扩展 |
| 增删 | 较快,只需要修改前一个元素的指针即可 | 较慢,需要移动修改元素只有的所有元素 |
| 查询 | 较慢,只能遍历查找 | 较快,可以通过下标直接访问 |
| 在访问方式上 | 必须是顺序访问,不能随机访问 | 可以随机访问其中的元素 |
| 空间的使用上 | 可以随意扩大 | 不能 |
链表是有data和指向下一个数据的指针地址两部分组成

数组是有下标索引和data两部分组成

数组和链表都是线性表的结构,只不过它们的存储方式不一样
根据存储方式不同,可将线性表分为顺序表和链式表;
数组:在内存中,是一块连续的内存区域;
链表:是由不连续的内存空间组成;


参考:链接1,链接2
JavaScript不需要链表
了解过链表的同学应该都知道,链表有几个特点:
1、可以动态扩展空间(在js中,数组本来是这样的,但是有的语言中数组的长度是固定的,不能动态添加,如c、java语言)
2、需要一个头节点
3、需要知道下一个节点的地址
因为数组结构的局限性,所以才会有链表结构的存储方式。
那么这些局限性,在JavaScript中是不存在的。我们看看MDN怎么说的?
数组是一种类列表对象,它的原型中提供了遍历和修改元素的相关操作。
JavaScript 数组的长度和元素类型都是非固定的。
因为数组的长度可随时改变,并且其数据在内存中也可以不连续,所以 JavaScript 数组不一定是密集型的,这取决于它的使用方式。
一般来说,数组的这些特性会给使用带来方便,但如果这些特性不适用于你的特定使用场景的话,可以考虑使用类型数组 TypedArray
要问一个问题。
有谁知道JS的Array底层到底是个什么东西?
它具备栈的用法,push pop,加上unshift shift又是一个queue
又具备splice功能(链表擅长的)
但随机访问又具备O(1)的保证(真实array?hashmap?)
主要还是JS是门解释型&&高级上层语言,你所想写的东西底层体现的不一定是完完全全的数据结构思想体现。所写内容的性能实际受到的影响因素太多了。
换种问法好了,Array.prototype.sort底层采用的排序方案是什么?每款引擎每个年代都是同一种方案吗?
所以从前端数据结构角度(面向面试编程),链表是一个重要的算法、数据结构考点,实际使用实在是鲜有机会。
JavaScript真的需要链表吗?的更多相关文章
- 学习javascript数据结构(二)——链表
前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...
- 标 题: JavaScript真的要一统江湖了
http://www.newsmth.net/nForum/#!article/Python/125347?p=4 标 题: JavaScript真的要一统江湖了 发信站: 水木社区 (Fri Se ...
- JavaScript真的要一统江湖了
ttp://www.newsmth.net/nForum/#!article/Python/125347?p=4 标 题: JavaScript真的要一统江湖了 发信站: 水木社区 (Fri Sep ...
- 用JavaScript来实现链表LinkedList
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址. 写在前面 好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了.但幸运 ...
- javascript中的链表结构—从链表中删除元素
1.概念 上一个博文我们讲到链表,其中有一个方法remove()是暂时注释的,这个方法有点复杂,需要添加一个Previous()方法找到要删除的元素的前一个节点,这一个博文我们来分析一下这个remov ...
- javascript中的链表结构
1.定义 很多编程语言中数组的长度是固定的,就是定义数组的时候需要定义数组的长度,所以当数组已经被数据填满的时候,需要再加入新的元素就很困难.只能说在部分变成语言中会有这种情况,在javascript ...
- 使用JavaScript实现单向链表
一.实现功能 1.链表元素头部插入 this.unShift = function(data) {} 2.链表元素尾部插入 this.append= function(data) {} //返回boo ...
- javascript算法-单链表
链表相比数组更具灵活性和扩展性.主要有节点数据以及指向节点的指针所构成. 链表中节点的实现[元素和指针]: let Node = function( element ){ this.element = ...
- 【javascript】数据结构-链表
// 创建一个链表 function LinkedList(){ // 创建一个Node辅助类,表示需要加入列表的项,它包含一个element属性,即表示需要加入到列表中的值,next属性表示指向下一 ...
- JavaScript实现单向链表
JavaScript 本身提供了十分好用的数据类型,以满足大家的日常使用.单靠 Array 和 Object 也的确足够应付日常的绝大部分需求,这也导致了很多前端er对数据结构这一块不是十分的了解. ...
随机推荐
- Innodb快速复习
放一张官方架构图: 参考文章: 一文带你了解MySQL之InnoDB_Buffer_Pool-阿里云开发者社区这一篇buffer pool讲解的很好 [动画演示:MySQL的BufferPool和Ch ...
- 工良出品 | 长文讲解 MCP 和案例实战
作者:痴者工良 博客地址:https://www.whuanle.cn/ 示例项目地址:https://github.com/whuanle/mcpdemo 近期 MCP 协议越来越爆火,很多开发者都 ...
- 前端速成之——Script
Script 1-引入js和函数调用 function函数:必然存在一个返回值,绝对不会书写 void,要么返回 undefine,要么返回 return 的数据 function etoak(val ...
- SQL Server 2025 中的改进
SQL Server 2025 中的改进 当我们接近 SQL Server 2025 的首次公开版本时,开始深入探究 Azure SQL DB 如今(已公布和未公布)但在 SQL Server 盒装产 ...
- Java--事务,操作数据库,实现转账
更新:2019/3/29 目录 简介 事务的四个特性 一个小Demo 目录结构 jdbc.properties JDBCUtil.java TestTransaction.java[核心代码] 数据库 ...
- 『Plotly实战指南』--在科学数据可视化中的应用(上)
在科学研究中,数据可视化是连接实验与理论的关键桥梁. 它不仅能够清晰地呈现实验规律,还能验证假设并支持科研决策. Plotly作为一款强大的可视化工具,凭借其交互性.动态图表支持和灵活的可定制性,在科 ...
- 信息资源管理文字题之“IT服务管理的核心流程和具体内容”
一.为了充分利用ERP信息系统资源,LX集团采用了各种先进的信息系统管理概念和方法,包括IT服务管理. 要求:说明IT服务管理流程包括那两大核心类别,分别说明他们个包含哪些具体流程 二.答案 答:两大 ...
- Linux之新增文件夹
一.格式 mkdir 文件名 二.案例 #查看文件 root@bbbbeb52:/# ll total 108 drwxr-xr-x. 1 root root 57 May 24 13:09 ./ d ...
- 自建OpenDeepWiki并且白嫖500代金券
相信很多人都对OpenDeepWiki很感兴趣.OpenDeepWiki提供了MCP实现,您可以部署属于自己公司的私有知识库,将仓库加入进去,通过MCP对指定的仓库实现内容检索并提供最佳指引. 白嫖5 ...
- 消息队列, 一种取舍的选择 Redis Stream
人多公司方便多个业务方解耦, 常用一些成熟的消息队列. 会有专门部门帮你维护好. 但在小公司, 看成本靠个人. 有的简单可能就是 redis list or mysql 存一些状态, 有问题了就自己手 ...