返回顶部
首页 > 资讯 > 精选 >Map与Set怎么使用
  • 575
分享到

Map与Set怎么使用

2023-07-02 09:07:59 575人浏览 泡泡鱼
摘要

这篇文章主要介绍“Map与Set怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Map与Set怎么使用”文章能帮助大家解决问题。1.基本概念我们先来了解以下 Map 和 Set 的基本概念,这

这篇文章主要介绍“Map与Set怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Map与Set怎么使用”文章能帮助大家解决问题。

    1.基本概念

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

    1.1 Map(字典)

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

    官网解释:

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

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

    • 键值对

    • 记住插入顺序

    • 任意值作为键

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

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

    特点总结:

    • Map 对象这种数据结构和和对象类型,都已键值对的形式存储数据,即 key-vlue 形式。

    • Map 对象存储的数据是有序的,而我们平常使用的对象是无序的,所以通常当我们需要使用对象形式(键值对)存储数据且需要有序时,采用 Map 对象进行存储。

    • Map 对象的键值可以是任意类型,我们平时使用的对象只能使用字符串作为键。

    1.2 Set(集合

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

    官网的解释:

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

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

    • 任何类型

    • 唯一值

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

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

    特点总结:

    • Set 对象是一个类数组对象,它长得就很像数组。

    • Set 对象存储的值是不重复的,所以我们通常使用它来实现数组去重。

    • Set 对象存储的数据不是键值对的形式,而且它可以存储任何类型的数据。

    2.基本使用

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

    2.1 Map 基本使用

    初始化 map 对象:

    let myMap = new Map();

    初始化 map 时传入数据:

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

    let defaultMap = new Map([['name', '张三'], ['age', 20]]);

    打印出来看看结果:

    Map与Set怎么使用

    插入数据:

    myMap.set('name', '小猪课堂'); // 字符串作为键myMap.set(12, '会飞的猪'); // number 类型作为键myMap.set({}, '知乎'); // 对象类型作为键

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

    Map与Set怎么使用

    获取长度:

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

    let myMapSize = myMap.size;

    获取值:

    let objKey = {};myMap.set('name', '小猪课堂'); // 字符串作为键myMap.set(12, '会飞的猪'); // number 类型作为键myMap.set(objKey, '知乎'); // 对象类型作为键let name = myMap.get('name');let age = myMap.get(12);let any = myMap.get(objKey);console.log(name, age, any); // 小猪课堂 会飞的猪 知乎

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

    删除某个值:

    myMap.delete('name');

    判断某个值是否存在:

    myMap.has('name'); // 返回 bool 值

    2.2 Set 基本使用

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

    初始化Set对象:

    let mySet = new Set();

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

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

    let defaultSet = new Set(['张三', 12, true]);

    一起来看看输出结果:

    Map与Set怎么使用

    插入数据:

    mySet.add(1);mySet.add('小猪课堂');

    打印结果:

    Map与Set怎么使用

    获取长度:

    let mySetSize = mySet.size;

    获取值:

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

    mySet.forEach((item) => {  console.log(item)})

    删除某个值:

    mySet.delete(1);

    判断某个值是否存在:

    mySet.has(1); // 返回Boolean值

    3.Map和Set区别

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

    • MapSet查找速度都非常快,时间复杂度为O(1),而数组查找的时间复杂度为O(n)

    • Map对象初始化的值为一个二维数组,Set对象初始化的值为一维数组。

    • Map对象和Set对象都不允许键重复(可以将Set对象的键想象成值)。

    • Map对象的键是不能改的,但是值能改,Set对象只能通过迭代器来更改值。

    4.使用场景介绍

    4.1 Set对象使用场景

    数组去重

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

    代码如下:

    let arr = [1, 2, 3, 4, 5, 6, 3, 2, 5, 3, 2];console.log([...new Set(arr)]); // [1, 2, 3, 4, 5, 6]

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

    4.2 Map对象使用场景

    数字类型充当键

    代码如下:

    let errors = new Map([  [400, 'InvalidParameter'],  [404, 'Not found'],  [500, 'InternalError']]);console.log(errors);

    输出结果:

    Map与Set怎么使用

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

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

    5.思考点

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

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

    简述原因:

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

    关于“Map与Set怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: Map与Set怎么使用

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

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

    猜你喜欢
    • Map与Set怎么使用
      这篇文章主要介绍“Map与Set怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Map与Set怎么使用”文章能帮助大家解决问题。1.基本概念我们先来了解以下 Map 和 Set 的基本概念,这...
      99+
      2023-07-02
    • ES6中怎么使用Map与Set集合
      这期内容当中小编将会给大家带来有关ES6中怎么使用Map与Set集合,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。集合的概念以及和数组的区别其实数组也是集合, 只不过数组...
      99+
      2024-04-02
    • ES6中的Map与Set怎么用
      这篇文章主要介绍了ES6中的Map与Set怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中的Map与Set怎么用文章都会有所收获,下面我们一起来看看吧。Map 对象Map 对象保存键值对。任何值(对...
      99+
      2023-06-27
    • Golang怎么使用Map实现去重与set的功能
      这篇文章将为大家详细讲解有关Golang怎么使用Map实现去重与set的功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二...
      99+
      2023-06-14
    • ES6中如何使用Map与Set集合
      本篇内容主要讲解“ES6中如何使用Map与Set集合”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ES6中如何使用Map与Set集合”吧!集合的概念以及和数组的区别其实数组也是集合, 只不过数组...
      99+
      2023-06-17
    • C++中set/multiset与map/multimap的使用详解
      目录一、关联式容器二、set的介绍1、接口count与容器multiset2、接口lower_bound和upper_bound三、map的介绍1、接口insert2、接口inser...
      99+
      2023-02-14
      C++ set/multiset map/multimap使用 C++ set/multiset C++ map/multimap
    • ES6中Set和Map怎么用
      这篇文章将为大家详细讲解有关ES6中Set和Map怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一.SetES6提供了新的数据结构Set。类似于数组,只不过其成员值...
      99+
      2024-04-02
    • Nodejs中Set和Map怎么用
      小编给大家分享一下Nodejs中Set和Map怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据类型set作用和数组类似,和数组不同的是:它不能存放重复的元...
      99+
      2023-06-14
    • C++红黑树应用之set和map怎么使用
      这篇文章主要介绍“C++红黑树应用之set和map怎么使用”,在日常操作中,相信很多人在C++红黑树应用之set和map怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++红黑树应用之set和map怎...
      99+
      2023-07-05
    • C++中map和set如何使用
      这篇文章主要介绍了C++中map和set如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++中map和set如何使用文章都会有所收获,下面我们一起来看看吧。一、set1.1 set的介绍首先要知道set...
      99+
      2023-07-05
    • Golang 使用Map实现去重与set的功能操作
      假设现在有一个需求 将以下 url 保存起来,要求不重复 www.baidu.com www.sina.com.cn www.hao123.com www.baidu.com w...
      99+
      2024-04-02
    • ES6中for循环和Map、Set怎么用
      这篇文章给大家分享的是有关ES6中for循环和Map、Set怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:现在大家先想一想,如果要你遍历一个数组的元素,你会选择如...
      99+
      2024-04-02
    • 怎么使用mysql的collation与Character set
      本篇内容介绍了“怎么使用mysql的collation与Character set”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔...
      99+
      2024-04-02
    • Java数据结构中的Map与Set该怎么理解
      这篇文章主要为大家分析了Java数据结构中的Map与Set该怎么理解的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Java数据结构中的Map与Set该怎么理...
      99+
      2023-06-29
    • C++ map与set封装如何实现
      今天小编给大家分享一下C++ map与set封装如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、前情回顾...
      99+
      2023-07-05
    • 如何使用Set和Map存储数据
      这篇文章主要讲解了“如何使用Set和Map存储数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Set和Map存储数据”吧!许多年来,程序员们一直使...
      99+
      2024-04-02
    • ES6基础语法之Map和Set对象怎么用
      本篇内容主要讲解“ES6基础语法之Map和Set对象怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ES6基础语法之Map和Set对象怎么用”吧!一、Map对象Map 对象保存键值对。任何值...
      99+
      2023-06-30
    • C++map与set封装实现过程讲解
      目录一、前情回顾二、简化源码三、仿函数四、迭代器五、set的实现六、map的实现七、红黑树代码一、前情回顾 set 参数只有 key,但是map除了key还有value。我们还是需要...
      99+
      2023-03-08
      C++ map与set封装 C++ map封装 C++ set封装
    • vue $set怎么使用
      这篇文章主要讲解了“vue $set怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue $set怎么使用”吧!代码如下:<!-- 操作 -->&nb...
      99+
      2023-07-04
    • C++中map和set的简介及使用详解
      目录关联式容器键值对setset的介绍set的使用multisetmapmap的介绍map的使用map构造map的插入map的[ ]运算符重载multiset关联式容器 关联式容器包...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作