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真的需要链表吗?的更多相关文章

  1. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  2. 标 题: JavaScript真的要一统江湖了

    http://www.newsmth.net/nForum/#!article/Python/125347?p=4 标  题: JavaScript真的要一统江湖了 发信站: 水木社区 (Fri Se ...

  3. JavaScript真的要一统江湖了

    ttp://www.newsmth.net/nForum/#!article/Python/125347?p=4 标  题: JavaScript真的要一统江湖了 发信站: 水木社区 (Fri Sep ...

  4. 用JavaScript来实现链表LinkedList

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址. 写在前面 好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了.但幸运 ...

  5. javascript中的链表结构—从链表中删除元素

    1.概念 上一个博文我们讲到链表,其中有一个方法remove()是暂时注释的,这个方法有点复杂,需要添加一个Previous()方法找到要删除的元素的前一个节点,这一个博文我们来分析一下这个remov ...

  6. javascript中的链表结构

    1.定义 很多编程语言中数组的长度是固定的,就是定义数组的时候需要定义数组的长度,所以当数组已经被数据填满的时候,需要再加入新的元素就很困难.只能说在部分变成语言中会有这种情况,在javascript ...

  7. 使用JavaScript实现单向链表

    一.实现功能 1.链表元素头部插入 this.unShift = function(data) {} 2.链表元素尾部插入 this.append= function(data) {} //返回boo ...

  8. javascript算法-单链表

    链表相比数组更具灵活性和扩展性.主要有节点数据以及指向节点的指针所构成. 链表中节点的实现[元素和指针]: let Node = function( element ){ this.element = ...

  9. 【javascript】数据结构-链表

    // 创建一个链表 function LinkedList(){ // 创建一个Node辅助类,表示需要加入列表的项,它包含一个element属性,即表示需要加入到列表中的值,next属性表示指向下一 ...

  10. JavaScript实现单向链表

    JavaScript 本身提供了十分好用的数据类型,以满足大家的日常使用.单靠 Array  和 Object 也的确足够应付日常的绝大部分需求,这也导致了很多前端er对数据结构这一块不是十分的了解. ...

随机推荐

  1. AI应用部署本地步骤

    训练 微调 Ollama Gpt-Sovits Stable-Diffusion

  2. zk源码—4.会话的实现原理

    大纲 1.创建会话 (1)客户端的会话状态 (2)服务端的会话创建 (3)会话ID的初始化实现 (4)设置的会话超时时间没生效的原因 2.分桶策略和会话管理 (1)分桶策略和过期队列 (2)会话激活 ...

  3. 康谋分享 | 仿真驱动、数据自造:Anyverse巧用合成数据重构智能座舱

    随着汽车向智能化.场景化加速演进,智能座舱已成为人车交互的核心承载.从驾驶员注意力监测到儿童遗留检测,从乘员识别到安全带状态判断,座舱内的每一次行为都蕴含着巨大的安全与体验价值. 然而,这些感知系统要 ...

  4. Golang从0到1实现简易版expired LRU cache带图解

    1.支持Put.Get的LRU实现 想要实现一个带过期时间的LRU,从易到难,我们需要先学会如何实现一个普通的LRU,做到O(1)的Get.Put. 想要做到O(1)的Get,我们很容易想到使用哈希表 ...

  5. 多文件,从url地址中下载文件并进行压缩

    直接上代码 Controller层 //我这里直接拿实体接收,entity.getFile()是List<对象>,对象里面存储文件相关的内容 @PostMapping("/zip ...

  6. StarBlog和Masuit.MyBlogs博客程序学习使用日记(一)

    最近买了个简单的服务器,想着搞点花活,就去找了找网上的开源代码,感谢大佬的开源库:(https://gitee.com/ysgdaydayup/DotNetGuide) 在上面有列开源的博客框架,我是 ...

  7. 由 Array.includes 函数引发对引用数据类型的思考

    `` 数组的includes方法在日常的编程中比较常用到,其作用就是判断某一数据是否在数组中,通常来说,数组中的数据如果是数字,布尔值,或者字符串的话,都是能够进行判断的 例如: [1,2,3,4]. ...

  8. 【公众号搬运】React-Native开发鸿蒙NEXT(8)

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  9. AI智能体策略FunctionCalling和ReAct有什么区别?

    Dify 内置了两种 Agent 策略:Function Calling 和 ReAct,但二者有什么区别呢?在使用时又该如何选择呢?接下来我们一起来看. 1.Function Calling Fun ...

  10. odoo接口

    @http.route('/zimo_lunch/select/<string:db_name>', type='http', auth='none')def trash_demo(sel ...