【面试题】Map和Set

news2024/11/17 23:26:13

1. Map和Object的区别

  • 形式不同
// Object
var obj = {
    key1: 'hello',
    key2: 100,
    key3: {x: 100}
}
// Map
var m = new Map([
    ['key1', 'hello'],
    ['key2', 100],
    ['key3', {x: 100}]
])
  • API不同
// Map的API
m.set('name', '小明')    // 新增
m.delete('key2')     // 删除
m.has('key3')      // 判断是否有'key3'
m.forEach((value, key) => console.log(key, value))    // 使用forEach来循环遍历Map
m.size    // 可以获取Map的长度
m.get('key1')   // 获取键名为'key1'的值
  • Object只能以字符串类型作为 key,但是Map能以任何类型最为 key
var a = {name: 'xxx'}
m.set(a, 'object key')

在这里插入图片描述

  • Map是有序结构,Object是无序结构

Map虽然是有序结构,但是它的相关操作依然速度很快。下面举一个例子,分别在Map和Object中进行相同的操作,观察所花费的时间。

var obj = {}
for(let i = 0; i < 100 * 10000; i++){
    obj[i + ''] = i
}

var m = new Map()
for(let i = 0; i < 100 * 10000; i++){
    m.set(i + '', i)
}

// 查找操作花费时间对比
console.time('obj find')
obj['200000']
console.timeEnd('obj find')

console.time('map find')
obj['200000']
console.timeEnd('map find')

// 删除操作花费时间对比
console.time('obj delete')
delete obj['200000']
console.timeEnd('obj delete')

console.time('map delete')
m.delete['200000']
console.timeEnd('map delete')

在这里插入图片描述

2. Set和Array的区别

  • 形式不同
// Array
var arr = [10, 20, 30, 40]
// Set
var set = new Set([10, 20, 30, 40])
  • API不同
// Set的API
set.add(50)   // 增加
set.delete(10)   // 删除
set.has(30)     // 判断是否有 30
set.size        // 获取Set的长度
set.forEach(val => console.log(val))   // 循环遍历
  • Set元素不能重复(可以用于数组去重),数组元素可以重复
function unique(arr){
    const set = new Set(arr)
    return [...set]
}
  • Set是无序结构,操作快;Array是有序结构,操作慢。下面举一个例子,分别在Set和Array中进行操作,观察所花费的时间。
var arr = []
for(let i = 0; i < 100 * 10000; i++){
    arr.push(i)
}

var set = new Set()
for(let i = 0; i < 100 * 10000; i++){
    set.add(i)
}

// Array添加元素花费的时间
console.time('arr unshift')
arr.unshift('a')
console.timeEnd('arr unshift')

console.time('arr push')
arr.push('b')
console.timeEnd('arr push')

// Set添加元素花费的时间
console.time('set add')
set.add('a')
console.timeEnd('set add')

// 查找操作花费的时间
console.time('arr find')
arr.includes(500000)
console.timeEnd('arr find')

console.time('set find')
set.has(500000)
console.timeEnd('set find')

在这里插入图片描述

3. WeakMap和WeakSet

  • WeakMap 和 WeakSet 是弱引用,目的是防止内存泄漏
  • WeakMap 只能使用对象作为 key,WeakSet 只能使用对象作为 value
  • 因为WeakMap 和 WeakSet 是弱引用,里面的key随时可能会被销毁,所以不能使用 forEach 和 size,只能使用 add delete has。
// WeakMap 
var wMap = new WeakMap()

function fn(){
    const obj = {name: '小明'}
    wMap.set(obj, 'name info')   // 弱引用
}

fn()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统闲谈06——进程管理

操作系统闲谈06——进程管理 一、进程调度 01 时间片轮转 给每一个进程分配一个时间片&#xff0c;然后时间片用完了&#xff0c;把cpu分配给另一个进程 时间片通常设置为 20ms ~ 50ms 02 先来先服务 就是维护了一个就绪队列&#xff0c;每次选择最先进入队列的进程&#…

Prometheus PromQL入门

一、Prometheus简介和架构 Prometheus 是由 SoundCloud 开源监控告警解决方案。架构图如下&#xff1a; 如上图&#xff0c;Prometheus主要由以下部分组成&#xff1a; Prometheus Server&#xff1a;用于抓取和存储时间序列化数据Exporters&#xff1a;主动拉取数据的插件P…

Chrome开发者工具:利用网络面板做性能分析

Chrome 开发者工具&#xff08;简称 DevTools&#xff09;是一组网页制作和调试的工具&#xff0c;内嵌于 Google Chrome 浏览器中。 Chrome 开发者工具有很多重要的面板&#xff0c;比如与性能相关的有网络面板、Performance 面板、内存面板等&#xff0c;与调试页面相关的有…

字符串匹配 - 模式预处理:BM 算法 (Boyer-Moore)

各种文本编辑器的"查找"功能&#xff08;CtrlF&#xff09;&#xff0c;大多采用Boyer-Moore算法&#xff0c;效率非常高。算法简介在 1977 年&#xff0c;Robert S. Boyer (Stanford Research Institute) 和 J Strother Moore (Xerox Palo Alto Research Center) 共…

SpringCloud(二)负载均衡服务调用Ribbon、服务接口调用OpenFeign案例详解

五、负载均衡服务调用Ribbon 技术版本Spring Cloud版本Hoxton.SR1Spring Boot版本2.2.2RELEASECloud Alibaba版本2.1.0.RELEASE Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主…

DOS经典软件,落下帷幕,新型国产平台,蓬勃发展

提起DOS时代&#xff0c;总让人难以忘怀&#xff0c;陷入深深回忆中&#xff0c;风靡一时的许多软件&#xff0c;如今早已不在&#xff0c;这几款被称为DOS必装的软件&#xff0c;更是让人惋惜。 你还记得这图吗&#xff1f;堪称DOS系统最经典的软盘复制与映像生成软件&#xf…

八十九——一三三

八十九、JavaScript——数组的简介 一、数组 数组(Array) - 数组也是一中复合数据类型&#xff0c;在数组可以存储多个不同类型的数据 - 数组中存储的是有序的数据&#xff0c;数组中的每个数据有一个唯一的索引 可以通过索引来操作获取数据 - 数据中存储的数据叫元素 - 索引&…

从 MVC 架构到三层(3-Tier)架构

一、MVC 存在的痛点问题 对于业务逻辑不甚复杂的场景&#xff0c;MVC 尚能胜任。但随着前端 MVVM&#xff08;Model-View-View-Model&#xff09;开发模式的兴起&#xff0c;尤其是前端框架如 Vue、React 的普及&#xff0c;服务端的 MVC 设计模式使用场景变得越来越少&#x…

NetSuite Intercompany Framework 101

今朝&#xff0c;谈一谈Intercompany Framework&#xff0c;这是一个彰显NetSuite市场野心的基础功能框架。从20.2开始逐渐浮出水面&#xff0c;虽然经过过往的几个版本&#xff0c;不断推出组成功能&#xff0c;但目前仍然未见其全貌。 作为顾问&#xff0c;你必须关注它&…

详解JavaScript的形参,实参以及传参

文章目录 前言一、参数是什么&#xff1f;二、形参和实参 1.形参 2.实参三、传参 1.参数传递的对应关系2.两个传参的例子 总结前言 编程初学者在接触JavaScript这门语言时&#xff0c;很难搞懂里面的逻辑&#xff0c;这就会导致入门慢&#xff0c;入门难。这种难度一般…

Banana Pi BPI-R3 评测:详细信息、功能

Banana Pi BPI-R3 路由板著名的 Banana Pi 品牌背后的公司 Sinovoip Co., Ltd 刚刚宣布了一款名为 Banana Pi BPI-R3 的带有两个 SFP 端口的新型开源路由器。它可能是市场上首批具有内置光接口的单板路由器之一。这种出色的产品对于连接到快速光纤互联网的用户特别有益&#xf…

【PyTorch学习4】《PyTorch深度学习实践》——线性回归(Linear Regression)

目录一、实现框架二、程序实现三、代码讲解1.self.linear torch.nn.Linear(1, 1)2.model(x_data)3.criterion torch.nn.MSELoss(reductionsum)&#xff0c;loss criterion(y_pred, y_data)一、实现框架 1、Prepare dataset 2、Design model using Class (inherit from nn.M…

【Leedcode】顺序表必备的三道面试题(附图解)

顺序表必备的三道面试题&#xff08;附图解&#xff09; 文章目录顺序表必备的三道面试题&#xff08;附图解&#xff09;前言一、第一题1.题目2.思路图解3.源码二、第二题1.题目2.思路图解3.源码三、第三题1.题目2.思路图解3.源码总结前言 本文给大家介绍三道顺序表学习过程中…

【项目精选】javaEE土地档案管理系统(源码+论文+视频)

技术&#xff1a;java、jsp、struts、spring、hibernate 数据库&#xff1a;oracle 集成开发工具&#xff1a;eclipse 点击下载源码 本土地项目管理系统在可行性研究的基础上&#xff0c;是为了进一步明确土地项目管理系统的软件需求&#xff0c;以便安排项目规划和进度&#x…

ARM+LINUX嵌入式学习路线

嵌入式学习是一个循序渐进的过程&#xff0c;如果是希望向嵌入式软件方向发展的话&#xff0c;目前最常见的是嵌入式Linux方向&#xff0c;关注这个方向&#xff0c;大概分3个阶段&#xff1a; 1、嵌入式linux上层应用&#xff0c;包括QT的GUI开发 2、嵌入式linux系统开发 3、…

Python|每日一练|字符串|递归|链表|单选记录:字符串转换整数 (atoi)|阶乘后的零| K 个一组翻转链表

1、字符串转换整数 (atoi)&#xff08;字符串&#xff09; 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃…

Golang 方法笔记

Golang中的方法是作用在指定的数据类型上的&#xff0c;因此自定义类型都可以有方法。方法定义func (recevier type) methodName (参数列表) (返回值列表) {方法体return 返回值}基本申明和调用type A struct {Num int}func (a A) test() {fmt.Println(a.Num)}说明&#xff1a;…

Python快速上手系列--邮件发送--详解篇

本章就来一起学习一下跑完自动化脚本后如何自动的发送邮件到指定的邮箱。zmail操作&#xff1a;1. 导包 import zmail2. 邮件内容&#xff0c;包含&#xff1a;主题(subject)、正文(content_text)、附件(attachments)3. 发件人信息&#xff0c;包含&#xff1a;发件人账号&…

什么牌的运动耳机比较好、运动耳机排行榜10强

现在运动健身的潮流持续不下&#xff0c;而且人们长期坐于办公室办公&#xff0c;严重影响身体的健康&#xff0c;这时不论是去健身房锻炼&#xff0c;还是户外跑步都是非常必要的了&#xff0c;而蓝牙耳机作为运动必备的一款数码产品&#xff0c;更是受到了大家的青睐&#xf…

2023/02/18 ES6对象属性的解读

1 属性的可枚举性和遍历 <script>const obj {userName: zhaoshuai-lc,userAge: 26,userSex: male}let res Object.getOwnPropertyDescriptors(obj);console.log(res); </script>描述对象的 [ enumerable ] 属性, 称为“可枚举性”, 如果该属性为 [ false ], 就表…