我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

前言

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

张三:这个商品多少钱

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

收银员: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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

深入详解Vue3ref底层实现原理

随着现在vue3越来越普及,相应的面试题也多了起来。说到vue3的面试题,有一个最经典的就是对于实现ref和reactive这两个方法的底层原理,本文就来和大家简单讲讲吧
2023-05-17

Spring注解Autowired的底层实现原理详解

从当前springboot的火热程度来看,java config的应用是越来越广泛了,在使用java config的过程当中,我们不可避免的会有各种各样的注解打交道,其中,我们使用最多的注解应该就是@Autowired注解了。本文就来聊聊Autowired的底层实现原理
2022-11-13

Redis数据结构SortedSet的底层原理解析

目录概述一些常用命令实现跳跃表跳表的插入压缩列表概述一些常用命令存储:zadd key score value获取:zrange key start end获取:同时获取分数:zrange key start end with scor
2022-07-13

PHP数组在底层的实现原理详解

PHP数组由哈希表和顺序元素数组实现。哈希表将键映射到元素数组索引,元素数组顺序存储元素。数组元素通过键哈希为哈希表索引,再利用索引获取元素数组中元素位置,快速高效访问。插入和删除元素时,哈希表会调整索引,维持数组结构。数组性能受哈希函数、哈希表大小和访问模式影响。优化策略包括选择合适哈希函数、调整哈希表大小、使用有序数组和避免哈希表重新哈希。
PHP数组在底层的实现原理详解
2024-04-02

深入了解PHP底层机制与实现原理

深入了解PHP底层机制与实现原理PHP是一种广泛应用的服务器端脚本语言,它的底层机制和实现原理对于理解其工作原理和优化性能都具有重要意义。本文将深入探讨PHP的底层机制与实现原理,并配以具体代码示例,以帮助读者更好地理解和应用PHP。PHP
深入了解PHP底层机制与实现原理
2023-11-08

详解Golang中NewTimer计时器的底层实现原理

本文将主要介绍一下Go语言中的NewTimer,首先展示基于NewTimer创建的定时器来实现超时控制。接着通过一系列问题的跟进,展示了NewTimer的底层实现原理,需要的可以参考一下
2023-05-18

Golang结构体强转:实现原理与技巧详解

golang 中结构体强转是将一种结构体类型的值转换为另一种类型。可以通过断言强转、反射强转、指针间接强转等技巧实现。断言强转使用类型断言,反射强转使用反射机制,指针间接强转避免值复制。具体步骤为:1. 断言强转:使用 type asser
Golang结构体强转:实现原理与技巧详解
2024-04-03

PHP底层的高性能数据结构与实现方法

PHP底层的高性能数据结构与实现方法,需要具体代码示例随着互联网应用的不断发展,PHP已经成为了一种广泛使用的服务器端脚本语言。然而,在大规模的Web应用中,PHP的性能问题成为了一个不容忽视的问题,很多大型网站都出现了性能瓶颈和系统崩溃的
PHP底层的高性能数据结构与实现方法
2023-11-09

java语言自行实现ULID过程底层原理详解

这篇文章主要为大家介绍了java语言自行实现ULID过程底层原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Synchronized的底层实现原理(原理解析,面试必备)

synchronized 一. synchronized解读 1.1 简单描述 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized 翻译为中文的意思是同步,也称之为同步锁。 synchronize
2023-08-19

深入了解Go的interface{}底层原理实现

目录1. interface{}初探2. eface3. iface4. 接口转化1. interface{}初探 Go是强类型语言,各个实例变量的类型信息正是存放在interface{}中的,Go中的反射也与其底层结构有关。 iface
2022-06-07

深入理解Golang接口的底层实现原理

深入理解Golang接口的底层实现原理,需要具体代码示例Go语言(Golang)是一种由Google开发的开源编程语言,因其简洁、高效和并发特性而备受程序员青睐。在Go语言中,接口(interface)是一种非常重要的概念,它使代码更加灵
深入理解Golang接口的底层实现原理
2024-02-23

spring注解的底层实现原理是什么

Spring注解的底层实现原理主要依赖于Java的反射机制。在Spring中,通过使用注解来标识类、方法或字段,从而告诉Spring容器如何处理它们。当Spring容器启动时,它会扫描应用程序中的注解,并根据注解的信息生成相应的对象和配置。
2023-10-09

编程热搜

目录