首页 > 其他分享 >关于Map和WeakMap

关于Map和WeakMap

时间:2023-01-09 22:45:28浏览次数:40  
标签:Map 键名 对象 WeakMap 键值 引用 关于

Map
1:什么是Map
Map类似于对象,但是键名不限于字符串,可以说Object结构提供键值对应,Map提供值值对应,因此采用Map结构会优于传统对象。

const dataMap = new Map()
const element = document.querySelector('.node')
dataMap.set(element,'objectData')
console.log(dataMap.get(element))
console.log(dataMap)

 


上面的代码中我们获取值时直接传入了element对象,成功将对象作为键名,弥补了传统对象的不足。

2:Map的特点
Map默认情况下不包含任何键,所有键都是自己添加进去的。不同于Object原型链上有一写默认的键。
Map的键可以时任何类型数据,就连函数都可以。
Map的键值对个数可以轻易通过size属性获取,Object需要手动计算。
Map在频繁增删键值对的场景下性能比Object更好。
3:什么时候用Map
想要添加的键值名和Object上的默认键值名冲突,又不想改名,用Map。
需要String和Symbol以外的数据类型做键值时,用Map。
键值对很多,有时需要计算数量,用Map。
需要频繁地增删键值对时,用Map。
WeakMap
1:什么是WeakMap
WeakMap是ES6中新增的一种集合类型,叫做'弱映射'。它和Map是兄弟关系,与Map的区别在于这个弱字,API还是Map那套API

什么是弱引用
是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问的,并因此可能在任何时刻被回收。

也就是说当我们创建一个弱引用的对象时,我们就可以静静地等待其被垃圾回收器回收。

总的来说,局势WeakMap保持了对键名所引用对象的弱引用,即垃圾回收机制不将该引用考虑在内。只要所引用的对象的其它引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap里面的键名对象和所对应的键值对会自动消失,不需要手动删除引用。

2:WeakMap的特性
只接受对象作为键名(null除外),不接受其它类型的值作为键名

不可遍历
正因为WeakMap对键名引用的对象是弱引用关系 ,因此WeakMap内部成员是会取决于垃圾回收机制有没有执行,运行前后成员个数很可能是不一样的,而垃圾回收机制的执行又是不可预测的,因此不可遍历。

Map和WeakMap区别
Map的键可以是任意类型,WeakMap只接受对象作为键,不接受其它类型的值作为键
Map的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键;WeakMap的键是弱引用,键所指向的对象是可以被垃圾回收,此时键是无效的。
Map可以被遍历,WeakMap不能被遍历
————————————————
版权声明:本文为CSDN博主「mieRui」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/asfasfaf122/article/details/128584265

标签:Map,键名,对象,WeakMap,键值,引用,关于
From: https://www.cnblogs.com/z-bky/p/17038738.html

相关文章

  • 关于MyBatis查询属性封装到对象,对象为null的情况源码分析
    源码分析在DefaultResultSetHandler类中getRowValue方法创建映射类相应的对象,如果为列匹配到的值标识foundValues是false,表示没有为对象中任何一个字段映射到一个值,则......
  • Guava学习笔记:Guava新增集合类型-Bimap
    @TestpublicvoidBimapTest(){BiMap<Integer,String>logfileMap=HashBiMap.create();logfileMap.put(1,"a.log");logfileMap.pu......
  • 关于CDN与真实ip
    什么是CDNCDN的全称是ContentDeliveryNetwork,即内容分发网络,很多大厂都会在全国范围内架设CDN,以解决用户用户访问量大,网点不均衡的问题,达到负载均衡的目的。同时也可以......
  • 【java基础】如何创建20元素以上的不可变集合?(Map.of()无法创建20个以上)
    背景由于Map.of()(jdk-9出现)创建的不可变集合无法超过20个参数,所以可以使用下面的办法创建Map<Object,Object>map=Map.ofEntries(hm.entrySet().toArray(newMap.Entry......
  • mapreduce基础JOB操作
    packagecagy.mapreduce.wordcount;importjava.io.IOException;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.m......
  • 目标检测模型的评价标准-AP与mAP
    前言一,精确率、召回率与F11.1,准确率1.2,精确率、召回率1.3,F1分数1.4,PR曲线1.4.1,如何理解P-R曲线1.5,ROC曲线与AUC面积二,AP与mAP2.1,AP与mAP指标......
  • 获取当前日期并把年月日放到map中
    因为经常有需求要获取当前年月日并且进行一些拼接,所以自己写了个公共方法来实现:/*****@return获取当天年月日*/publicstaticMap<String,Objec......
  • 关于for循环中remove方法使用问题
    //直接forEachList<String>k=newArrayList<>();k.add("1");k.add("2");k.add("3");k.add("4");for(Stringd:k){k.remove(d);}//for循环List<String>k=......
  • Mybatis中配置Mapper的方法
    现假设我有这样一个实体类:Java代码​​​​​​1.packagecom.tiantian.mybatis.model;2.3.publicclassUser{4.5.privateintid;6.privat......
  • Mac下的nmap及brew
    新的Ventura貌似没有内置nmap命令了,搜了下,可以通过brewinstallnmap安装。但是brewinstall过程中踩了几个坑:1、报notingitdirectory。找个是git认为homebrew-cor......