iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScriptMap实现原理与底层结构详解
  • 619
分享到

JavaScriptMap实现原理与底层结构详解

2024-04-02 19:04:59 619人浏览 薄情痞子
摘要

目录前言hash表实现 get 功能实现 set 功能做个测试前言 比如,有一天,我们去购物店买了一件新的、不熟悉的商品。 张三:这个商品多少钱 收银员:(在键盘上噼啪作响。。。)

前言

比如,有一天,我们去购物店买了一件新的、不熟悉的商品。

张三:这个商品多少钱

收银员:(在键盘上噼啪作响。。。)

收银员:88元,给你凑个整。

(滴。。。付款成功)

成功支付90元。

hash表

收银员如何在数千件商品中如此迅速地找到这件商品的价格。

有人说可以遍历暴力查询,总能找到项目

如果有一百万种产品,需要多少时间?虽然始终可以从头到尾查询,但我们追求更好的性能,这就是我们的哈希表存储。

我们需要做的就是将商品转化为下标形式的数字,并对应数组的下标,这样下次遇到这个商品,就可以直接根据下标获取我们需要的信息了。

就像我们有一根香蕉? banana(香蕉)

我们想一个办法把它变成一个数字:

        function getHash(str) {
            let _hash = 0;
            for (let i = 0; i < str.length; i++) {
                const charCode = str.charCodeAt(i);
                _hash += charCode;
            }
            return _hash;
        }
        console.log(getHash('banana')) //609

这里我们计算出它对应的数字是609。

这里我们只是添加了字母对应的ascii下标。仅供参考和学习。一个好的哈希算法应该尽量避免下标过多和下标分散过大,还要处理和解决哈希冲突。

所以我们可以将数组下标到位置 609 并添加价格,arr[609] = 66,这里设置66元。

下次查询香蕉的价格,还是可以通过 getHash 算出609,直接取数组的下标就可以得到我们的价格,只需要O(1)的时间。

实现 get 功能

        function get(key){
            let _hash = getHash(key);
            //这里的 arr 代表我们存储数据的数组
            if(!this.arr[_hash]){
                //如果没查到数据,返回undefined
                return undefined;
            }
            return this.arr[_hash];
        }

实现 set 功能

        function set(key,value){
            let _hash = getHash(key);
            //这里的 arr 代表我们存储数据的数组
            this.arr[_hash] = value;
        }

做个测试

        class MyHash {
            constructor(){
                this.arr = [];
            }
            get(key) {
                let _hash = getHash(key);
                //这里的 arr 代表我们存储数据的数组
                if (!this.arr[_hash]) {
                    //如果没查到数据,返回undefined
                    return undefined;
                }
                return this.arr[_hash];
            }
            set(key, value) {
                let _hash = getHash(key);
                //这里的 arr 代表我们存储数据的数组
                this.arr[_hash] = value;
            }
        }
        let myhash = new MyHash();
        myhash.set('banana', '88')
        console.log(myhash.get('banana'))

到此这篇关于javascript Map实现原理与底层结构详解的文章就介绍到这了,更多相关js Map内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScriptMap实现原理与底层结构详解

本文链接: https://www.lsjlt.com/news/168425.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScriptMap实现原理与底层结构详解
    目录前言hash表实现 get 功能实现 set 功能做个测试前言 比如,有一天,我们去购物店买了一件新的、不熟悉的商品。 张三:这个商品多少钱 收银员:(在键盘上噼啪作响。。。) ...
    99+
    2024-04-02
  • java中hashmap的底层数据结构与实现原理
    目录Hash结构HashMap实现原理为何HashMap的数组长度一定是2的次幂?重写equals方法需同时重写hashCode方法总结Hash结构 HashMap根据名称可知,其实...
    99+
    2024-04-02
  • 深入详解Vue3ref底层实现原理
    目录前言源码解析实践操作class类的get和set是什么结论前言 随着现在vue3越来越普及,相应的面试题也多了起来 说到vue3的面试题,有一个最经典的就是ref和reactiv...
    99+
    2023-05-17
    Vue3 ref实现原理 Vue3 ref原理 Vue3 ref
  • Redis底层数据结构详解
    Redis作为Key-Value存储系统,数据结构如下: Redis没有表的概念,Redis实例所对应的db以编号区分,db本身就是key的命名空间。 比如:user:1000作为...
    99+
    2024-04-02
  • Spring注解Autowired的底层实现原理详解
    目录一、Autowired注解的用法1、概述2、应用3、具体用法二、Autowired自动装配的过程一、Autowired注解的用法 1、概述 使用spring开发时,进行配置主要有...
    99+
    2022-11-13
    Spring注解Autowired原理 Spring注解Autowired Spring Autowired
  • Go反射底层原理及数据结构解析
    目录1. 反射的引入与介绍2. 反射的数据结构3. 如何通过反射对象来修改原数据对象的值?1. 反射的引入与介绍 在计算机科学中,反射是指计算机程序在运行时(Run time)可以访...
    99+
    2024-04-02
  • Go底层channel实现原理及示例详解
    目录概念:使用场景:底层数据结构:操作:创建发送接收关闭案例分析:概念: Go中的channel 是一个队列,遵循先进先出的原则,负责协程之间的通信(Go 语言提倡不要通过共享内存来...
    99+
    2024-04-02
  • hashmap底层实现原理
    一、hashmap底层实现原理 HashMap是基于哈希表的Map接口的非同步实现。元素以键值对的形式存放,并且允许null键和null值,因为key值唯一(不能重复),因此,null键只有一个。另外,hashmap不保证元素存储的顺...
    99+
    2023-10-29
    底层 原理 hashmap
  • synchronized底层实现原理
    测试类: public class SynchronizedTest {     public void get() {         synchronized (this) { ...
    99+
    2024-04-02
  • 深入了解PHP底层机制与实现原理
    深入了解PHP底层机制与实现原理PHP是一种广泛应用的服务器端脚本语言,它的底层机制和实现原理对于理解其工作原理和优化性能都具有重要意义。本文将深入探讨PHP的底层机制与实现原理,并配以具体代码示例,以帮助读者更好地理解和应用PHP。PHP...
    99+
    2023-11-08
    实现原理 深入了解 PHP底层机制
  • HashMap的底层实现原理
    这篇文章主要介绍“HashMap的底层实现原理”,在日常操作中,相信很多人在HashMap的底层实现原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HashMap的底层实现原理”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-04
  • Javasynchronized底层的实现原理
    目录监视器底层实现执行流程总结前言: 想了解 synchronized 是如何运行的?就要先搞清楚 synchronized 是如何实现? synchronized 同步锁是通过 J...
    99+
    2024-04-02
  • 深入理解Golang Channel 的底层结构
    目录make chan发送和接收Goroutine Pause/Resumewait empty channelGolang 使用 Groutine 和 channels 实现了 C...
    99+
    2024-04-02
  • Redis 哈希Hash底层数据结构详解
    目录1. Redis 底层数据结构2. hashtable3. redisDb 与 redisObject4. ziplist5. linkedlist6. quicklist1. ...
    99+
    2022-11-13
    redis中hash的底层 Redis底层数据结构 Redis中Hash数据结构的底层结构
  • Golang结构体强转:实现原理与技巧详解
    golang 中结构体强转是将一种结构体类型的值转换为另一种类型。可以通过断言强转、反射强转、指针间接强转等技巧实现。断言强转使用类型断言,反射强转使用反射机制,指针间接强转避免值复制。...
    99+
    2024-04-03
    golang 结构体
  • 分布式架构Redis中有哪些数据结构及底层实现原理
    目录引言1、面试官:我看你提到,项目中使用了Reids作为缓存,为什么是Reids而不是其他,Redis有什么优势吗?2、面试官:刚刚你提到Redis是单线程,为什么单线程模型的 R...
    99+
    2024-04-02
  • mysql表分区的使用与底层原理详解
    目录什么是分区表 分区表应用场景 分区表的限制 分区类型 分区表的使用 1、范围分区 2、列表分区(list分区) 3、列分区 4、hash分区 5、秘钥分区(key分区) 6、子分...
    99+
    2024-04-02
  • 详解Golang中NewTimer计时器的底层实现原理
    目录1.简介2.基本使用3.实现原理3.1 内容分析3.2 基本思路3.3 实现步骤3.4 NewTimer的实现4.总结1.简介 本文将介绍 Go 语言中的NewTimer,首先展...
    99+
    2023-05-18
    Golang NewTimer计时器原理 Golang NewTimer计时器 Golang 计时器
  • Redis RDB技术底层原理详解
    每日一句 低头是一种能力,它不是自卑,也不是怯弱,它是清醒中的嬗变。有时,稍微低一下头,或者我们的人生路会更精彩。 前提概要 Redis是一个的键-值(K-V)对的内存数据库服务,通...
    99+
    2024-04-02
  • 浅谈React底层实现原理
    目录1. props,state与render函数关系,数据和页面如何实现互相联动?2. React中的虚拟DOM常规思路改良思路(仍使用DOM)React的思路深入理解虚拟DOM3...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作