首页 > 其他分享 >Map底层实现、Map-Object性能对比

Map底层实现、Map-Object性能对比

时间:2022-09-19 15:11:48浏览次数:74  
标签:Map 迭代 Object 条目 键值 key 底层

Map底层实现、Map-Object性能对比

Map 是一个键值对的集合,和 Object 类似。 Map 做为构造函数,可以通过全局对象获取到。需要
通过 new 操作创建实例对象,直接调用会报错。 Map 构造函数接收一个 iterable 类型的参数,用来初
始化 Map 。

和Object的差异
1.Object 的 key 只能是字符串类型和 Symbol 类型, Map 的 key 可以是任意 javascript 类型
2.Map 的 key 是有序的,迭代时按照插入 key 的顺序, Object 的 key 是无序的。es6 以后
Object 的 key 也是有序的了
3.在频繁增删键值对的场景下, Map 的表现更好, Object 没有做优化

var m1 = new Map([[1,'1'],['name','zhangsan']]) // 任意 javascript 类型作为键值

m1.get('name') // zhangsan // 存在下标不可以使用下标或者直接键值获取value

Map对象的属性
size:用来获取 Map 中的条目数量
Map对象的方法
clear:清空对象中的条目
delete:删除特定的条目
get:获取特定的条目
has:检测是否包含特定的条目
set:设置特定的条目,如果已经包含,就更新该条目

迭代Map对象
entries():返回包含 [key, value] 的迭代器
keys():返回包含 key 的迭代器
values():返回包含 value 的迭代器
forEach():传入迭代处理函数,遍历所有条目
for..of 循环:和 entries() 函数的表现类似,循环内部对迭代器做了处理

注意:
迭代 Map 对象的过程中,新增的键值对可以被访问到。已经访问过的键值对,删除后再次添加进
来,会被再次访问。删除没有访问过的键值对,将不会被访问到。

Set vs Array /Map vs Object性能对比

let i = 0;
let tmp = new Array(200000).fill(null).map(e=>i++);
console.time('array');
tmp.splice(tmp.findIndex(e=> e===190000 ),1);
console.timeEnd('array'); // array: 2.18701171875 ms
let set2 = new Set(tmp)
console.time('set2');
set.delete(199999);
console.timeEnd('set2'); // set2: 0.004150390625 ms

标签:Map,迭代,Object,条目,键值,key,底层
From: https://www.cnblogs.com/brujie/p/16707732.html

相关文章

  • OTA底层包版本升级移植说明
     说明当前底层包的版本已经升级到了3.0版本,后续随着功能的扩展,还会有更多的版本.每一次升级,我可能不能及时的把所有的例程都更新一遍.这篇文章将说明一下用户如何......
  • Pest24: A large-scale very small object data set of agricultural pests for multi
    1.论文主要工作建立了一个包含24类典型虫害,并且使用了几种最先进的深度学习检测方法(RCNN、SSD、YOLOv3、CascadeR-CNN)来检测数据集中的害虫,从多个方面分析了数据集,发现了......
  • mybatis注解之@Mapper和@MapperScan的使用
    +目录mybatis注解之@Mapper和@MapperScan方式一:使用@Mapper注解方式二:使用@MapperScan注解@MapperScan和@Mapper区别及理解作用扫描一个包扫描多个包myb......
  • 第04周 预习:面向对象设计、继承与Object
    1,为什么说Java中的所有类都is-aObject?Object类是所有类的始祖,Java中的每一个类都扩展了Object.2,一,在JDK文档中查找Object的toString方法。说一说,该方法有什么用?-->t......
  • MyBatis标签之Select resultType和resultMap
    摘要:介绍MyBatis中Select标签的两个属性resultType和resultMap及其区别。1MyBatis动态SQL之if语句2MyBatis动态sql之where标签|转3MyBatis动态SQL之set标签|转4M......
  • can not be used when making a PIE object
    编译报错relocationR_X86_64_32against`.rodata'cannotbeusedwhenmakingaPIEobject;recompilewith-fPIEcollect2:error:ldreturned1exitstatusma......
  • KMP算法的底层理解
    KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。KMP的精髓所在就是前缀表。(下面用next[]数组来表......
  • [uvm sequence专题] objection in sequence (sequence中objection的用法以及UVM1.1d 1
    objectioninsequence(sequence中objection的用法以及UVM1.1d1.2的区别)1前言在UVM中,除了在各个taskphase中会出现控制objection的情况,在defaultsequence的执行中......
  • 简单理解数据代理Object.defineProperty(obj,变量,{})
    简单理解Object.defineProperty()数据代理:通过一个对象代理对另一个对象中属性的操作(读写)eg:letobj1={x:1}letobj2={y:2}Object.defineProper......
  • Map集合学习笔记
    规则:Map集合是一个双列集合,元素有键值对构成.(key-value)key值不可以重复的,value是可以重复的(因为Map中的key是存储到了set集合中)一个key只能对应一......