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

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

发布网友 发布时间:8小时前

我来回答

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底层原理之后,你会发现它们的实现原理就是红黑树。
一文搞懂Map与Set的用法和区别!

Set对象的使用方式和Map对象的使用方式非常的类似,只不过存储的数据格式不一样罢了。这里需要注意的Set对象存储的不是键值对形式,它只存储了值,没有键,就和数组类似。初始化Set对象:初始化Set对象带有默认值:和Map类似,Set初始化时也可以初始化默认数据。一起来看看输出结果:插入数据:打印结果:...

一文搞懂 == 、equals和hashCode

总结来说,equals() 用于比较对象内容,hashCode() 则用于高效定位,两者结合使用确保了数据结构的正确性。在实际编程中,切勿忽视它们的相互关系。"思考:在重写 equals() 时,忘记重写 hashCode() 将可能导致 HashMap 或 HashSet 的行为出乎意料。"

高中英语学习

1.掌握连系动词be,feel,look,get,turn等与表语连用的一般用法。 2.掌握延续性动词与瞬间动词在用法上的区别。 这类动词主要体现在过去时和完成时态中。 一、在现在完成时中延续性动词可与表示一段时间的介词短语for或since连用,而终止性动词的现在完成时则不能与一段时间连用。如: I have bought this dictiona...

一文搞懂Midjourney的全部命令

基础命令:/imagine这是最基础的指令,用于生成图片。输入提示词后,可以生成单图或利用垫图功能定制构图。垫图是通过上传参考图片,配合文字描述,创造与内容相符的图像。垫图操作点击"+"图标上传底图,输入"/imagine",将图片拖拽到对话框,输入关键词完成。设置查看:/settings此命令用于查看当前MidJourney...

一文搞懂ThreadLocal,再也不怕被面试官问到

ThreadLocalMap与HashMap的不同在于,前者采用开放地址法,key是弱引用,而后者是强引用。开放地址法在ThreadLocal中能更有效地处理小型数据量,且减少冲突。当使用弱引用时,ThreadLocalMap的key会随线程回收而自动清除,但需确保value在使用完后调用remove。总之,ThreadLocal是一种方便线程间数据隔离的工具...

一文搞懂reduce的用法和使用场景!

语法方面,reduce 方法接收两个参数:回调函数和初始值。回调函数用于处理数组元素,初始值则用于第一次执行回调函数时作为参数传递。在使用 reduce 时,有几个关键点需要注意:初始值对回调函数的执行结果有很大影响,返回值是遍历所有数组执行回调函数后的结果。当有初始值时,回调函数第一次执行时的 ...

C语言丨区别 typedef与#define的用法,一文搞懂关键字typedef

主要是理解二者的区别,依情况选用。识别typedef的方法 a)第一步,使用已知的类型定义替代typedef后面的名称,直到只剩下一个名字不识别为正确;b)第二步,未知名字为定义类型,类型为取出名称和typedef的所有部分;c)第三步,定义一个变量时,变量类型等价于把变量替代未知名字的位置所得到的类型。

【CSS】一文搞懂 em、px、rem、vh、vw 的区别!

而em则是相对单位,以元素的字体大小为基准,如果没有指定,会默认使用浏览器的字体大小,通过设置body的font-size,如62.5%,可以方便地进行换算。rem则类似em,但相对的是html根元素的font-size。vh和vw是视口相关的单位,vh表示视口高度的百分比,vw表示视口宽度的百分比,它们主要用于响应式布局,方便...

一文搞懂instanceof实现的原理是什么!

instanceof左侧是一个实例对象,右侧是一个构造函数。如果实例对象属于构造函数,那么instanceof就会返回true。我们判断类型是使用的Array、Object、String等等其实就是一个构造函数。总结:由上可以得出,判断数据类型并不是instanceof最准确的说法,它主要是用来判断实例对象与构造函数之间的关系的。而判断数据...

一文搞懂TCP与UDP的区别

TCP连接过程包括三次握手确保可靠连接,断开连接需要四次握手。TCP特点:可靠传输,使用流量控制和拥塞控制 一对一通信 面向字节流传输 首部开销大TCP和UDP比较:是否连接:无连接 VS 面向连接 是否可靠:不可靠 VS 可靠传输 连接对象:支持多种 VS 只能一对一 传输方式:面向报文 VS ...

一文详解FC和FB的区别与用法 离骚的附文的区别和用法 符文的区别与用法 教资离骚里三段附文的区别和用法 离骚三段互文的区别和用法 离骚三段符文用法和区别 离骚里三段附文的用法及区别 文言文符文的用法 离骚三段附文的区别用法PPT
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
西安光泰电子有限公司怎么样? 女人喝茶会长黑色素吗 ...时候会黑屏,按什么键都不管用,必须等对方挂电话才出来 宇宙在未来星球有可能毁灭吗?每个星球至少可以存活多久时间?地球要过... 宇宙还能存活多少年? 宇宙还能存活多少年? steam怎么检测已经有的游戏 有房贷能办不动产证吗? 冬天,寒冷的,秋天,哥哥,学生,班,教室,椅子,电脑的单词分别是? 诺基亚6500S怎么装百阅软件 一文搞懂尾递归 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, 通话记录的页面里 不显示归属地呢 ,一定要点击...