问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一文搞懂Map与Set的用法和区别!

发布网友 发布时间:2024-10-16 08:23

我来回答

1个回答

热心网友 时间:2024-10-16 16:51

作为前端开发人员,我们最常用的一些数据结构就是 Object、Array 之类的,毕竟它们使用起来非常的方便。往往有些刚入门的同学都会忽视 Set 和 Map 这两种数据结构的存在,因为能用 set 和 map 实现的,基本上也可以使用对象或数组实现,而且还更简单。

但是,存在必然合理,当你真正了解 Map 和 Set 之后,你就会发现它们原来时如此美好!

我们先来了解以下 Map 和 Set 的基本概念,这样才能帮助我们更好的使用。虽然我们通常把这两种数据结构混合着来讲,但事实上它们它们还是有挺大区别的!

1.1 Map(字典)

想要迅速了解一个新的数据结构或 API 是,查看官网是一个不错的选择。Map 在官网上也有解释,我们一起来看下。

官网解释:

Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。

官网的这句话非常精炼,我们从上面这句话中总结如下几个关键词:

一看到键值对,难免会想到对象。事实确实如此,Map 与我们平常所用的对象非常类似,它是一种类对象的数据结构,所以我们通常称它为 Map 对象。

但是我们可以把它说得更为官方一点:Map 字典。关于程序中字典的概念大家可以下去了解一下。

特点总结:

1.2 Set(集合)

和 Map 类似,我们同样先来看一看官网是怎么解释 Set 这个数据结构的。

官网的解释:

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。

Set 的解释比 Map 的解释还要精炼,我们从中提取出几个关键词:

上面关键词中我们需要重点关注“唯一值”,这说明使用 Set 存储的数据是不会重复的,除此之外,Set 也是一个对象,但是它是一个类数组对象,也就是说它长得像数组,我们通常直接称它为 Set 对象。

当然也可以官方一点的称它:Set 集合。

特点总结:

2.基本使用

我们平常使用 Array 或者 Object 的时候,都是直接采用[变量] = []、[变量] = {}的形式来进行初始化。而这里我们所讲的 Map 和 Set 数据结构它们都是以构造函数的形式出现的,所以我们通常使用 new Set()或者 new Map()的形式初始化的。

2.1 Map 基本使用

初始化 map 对象:

初始化 map 时传入数据:

由于 Map 对象是一个构造函数,所以我们在初始化的时候可以传入默认数据的,只不过我们需要注意传入默认数据的格式,它默认接收一个二维数组。

打印出来看看结果:

插入数据:

我们先打印出来看看结果:

获取长度:

我们传统的对象可以通过 Object.key().length 来获取对象长度,而 map 对象自带 size 属性获取对象长度。

获取值:

上段代码中需要注意的是不能使用 myMap.get({})的形式获取数据,因为 objKey!=={}。

删除某个值:

判断某个值是否存在:

2.2 Set 基本使用

Set对象的使用方式和Map对象的使用方式非常的类似,只不过存储的数据格式不一样罢了。这里需要注意的Set对象存储的不是键值对形式,它只存储了值,没有键,就和数组类似。

初始化Set对象:

初始化Set对象带有默认值:

和Map类似,Set初始化时也可以初始化默认数据。

一起来看看输出结果:

插入数据:

打印结果:

获取长度:

获取值:

由于Set对象存储的不是键值对形式,所以未提供get方法获取值,我们通常遍历它获取值:

删除某个值:

判断某个值是否存在:

3.Map和Set区别

如果我们学会了它们两者如何使用,或多或少都知道它们的区别在哪里,我们这里为大家总结一下它们的区别要点:

4.使用场景介绍

4.1 Set对象使用场景

数组去重

这是大家很熟悉的一种场景,使用Set对象的唯一性值特性方便的给我们数组去重。

代码如下:

需要注意的是Set对象是一个类数组,我们使用...扩展运算符将一个类数组转化为了一个真正的数组。

4.2 Map对象使用场景

数字类型充当键

代码如下:

输出结果:

我们可以使用Map对象建立一个请求状态码对象字典,因为状态码是数字类型,所以使用Map对象很合适。

除了该场景外,如果需要保证对象的顺序,那么也是可以使用Map对象的。

5.思考点

前面我们说Set和Map的插入删除效率为什么很高呢?

这里简单讲一下,更加深入需要大家自己下去好好学习一下数据结构了。

简述原因:

map和set存储的所有元素都是以节点的方式来进行存储的,这种节点结构和链表有点类似。我们都知道链表的特点是插入和删除都非常快,时间复杂度为O(1),两个节点通过指针相连,删除或者增加元素时,我们只是重新更改了指针的指向,不想数组那样,掺入或删除之后需要重新排序。

总结

Set对象和Map对象有很多优点的,比如说性能比较好等等,我们需要一一去体会它们的优缺点。你不如在每次创建数据结构之前想一想:使用Object更好还是Map更好呢?使用Array更好还是Set更好呢?当然,如果深究Set和Map底层原理之后,你会发现它们的实现原理就是红黑树。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
密室逃脱8迷失乐园攻略大全 密室逃脱8迷失游乐园通关攻略 密室逃脱8逃出红色豪宅第7关怎么过_第7关卡通关图文攻略 密室逃脱8卖火柴的小女孩旋转六边形介绍_密室逃脱8卖火柴的小女孩旋转六... 跨国行李托运 房屋复式是什么意思? 什么叫复式房子 请问 为了减掉身上的赘肉 除了锻炼以外 在饮食上要注意什么 请详细点... 淘宝买家购物满500元后使用信用卡的时候就不能支付 笔记本电脑如何保护 水韵江苏旅游年卡和苏州休闲年卡哪个划算 一文搞懂尾递归 2020年跨境电商wayfair如何开店入驻? 《天道无应人道茫茫续3》最新txt全集下载 天道无应人道茫茫续2小说txt全集免费下载 梦见白马有哪些寓意 梦到白马是什么意思 知道了种子特征码可以下载吗 论坛中提供的种子特征码要怎么才能下载这片子呢? 如何知道小狗的排卵期? 东海湾泉州附属丰泽小学今年什么时候摇号 今天12月5号泉州保障性住房摇号结果 什么意思啊? 泉州买房摇号冻结多久 为什么泉州买房要摇号 泉州房子为什么要摇号 培养皿培养皿如何清洁 细菌培养皿可以重复使用吗? 高考分数线有“重点线”“提档线”分别是指什么东西啊?谢谢了,大神帮 ... 大学录取分数线的出档线和重点线是什么意思 学信网的信息不对 儿童猥亵罪能减刑吗 猥亵儿童罪怎么减刑 结婚后我把户口迁出来了,准备迁到老公那边。但现在还没入,现在要入的... 急急急 我把户口迁到老公家里来了,什么证都办好了 孩子的出生证明也拿... 为什么我老公可以不经过我同意把我户口迁到他们家来 我和我丈夫结婚几年了,现在我想把他的户口迁到我这边来,是同一个区的... 为了小孩子读书,把我的户口签来成市,老公的户口还在农村,现在我还可以... 爱车在熄火后还有异响是怎么回事? 购买的空调是什么费用 空调属于什么费用 单位买空调属什么费用 空调入费用入什么科目 空调采买属于什么费用 伪造变造金融票证罪构成要件是怎样的 上市公司前面的ST是什么? 1,2,5,6,7,8,9打一成语 1,2,4,3,5,6,7,8,9打一成语 股票前面的字母什么意思 1,1,2,3,4,5,6,7,8,9,10,10(打一个成语) 华为手机怎么设置电话黑名单呢? 2024年湖南自考本科政策改革 三星a500手机首页的日期没了 我的手机型号是 a500, 通话记录的页面里 不显示归属地呢 ,一定要点击...