关于Map、WeakMap、Set 、WeakSet

2023-11-13

在计算机程序中,弱引用强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问的(或弱访问的),并因此可能在任何时刻被回收 

Map

Map 它类似于对象,也是键值对的集合,并且能够记住键的原始插入顺序。任何值(对象或者基本类型)都可以作为一个键或一个值。

实例属性和方法

  • Map实例支持size属性: 返回Map结构中的成员数目数量
  • set(key, value)方法: 设置Key所对应的键值,然后返回整个Map结构
  • get(key)方法: 读取key对应的键值,如果找不到key,返回undefined
  • has(key)方法: 返回一个布尔值,表示某个键是否在Map结构中
  • delete(key)方法: 删除某个键,返回true,删除失败返回false
  • clear()方法: 清除所有成员,没有返回值

WeakMap

WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。

WeakMap与Map的区别

  • WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。
  • WeakMap的键名所指向的对象不计入垃圾回收机制。它的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因此所有引用的对象的其他引用都被清除,垃圾回收站就会释放该对象所占用的内存。
  • WeakMap没有遍历操作(即没有key()、values()和entries()方法),也没有size属性
  • WeakMap无法清空,即不支持clear()方法。

实例方法

delete(key) 、 get(key)、 has(key) 、set(key, value)

Set

类似于数组,但是成员的值都是唯一的,没有重复。Set 本身是一个构造函数,用来生成Set数据结构

实例属性和方法

  • add(value): 添加某个值,返回Set结果本身
  • delete(value): 删除某个值,返回一个布尔值,表示删除是否成功
  • has(value): 返回一个布尔值,表示参数是否为Set成员
  • clear(value): 清除所有成员,没有返回值

遍历方法

  • Keys(): 返回键名的遍历器
  • values(): 返回键值的遍历器
  • entries(): 返回键值对的遍历器
  • forEach(): 使用回调函数遍历每个成员

WeakSet

WeakSet 对象允许你将弱保持对象存储在一个集合中。

它和 Set 对象的主要区别有:

  • WeakSet 只能是对象的集合,而不能像 Set 那样,可以是任何类型的任意值。
  • WeakSet 持弱引用:集合中对象的引用为引用。如果没有其它的对 WeakSet 中对象的引用,那么这些对象会被当成垃圾回收掉。
  • WeakSet是弱引用,在其内部有多少个成员取决于垃圾回收机制有没有运行, 运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的,因此es6规定weakSet是不可遍历的。

实例方法

add(value)、delete(value)、has(value) 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Map、WeakMap、Set 、WeakSet 的相关文章

  • 在 HP Load Runner 的 VuGen 中加载 javai.dll 时出现错误

    当我尝试在 HP load runner 的 VuGen 中编译一个简单的脚本时 无法启动 JVM 并出现以下错误 Java VM Internal Error Getting Error Loading javai dll 我在用着 HP
  • 监控 Java 应用程序上的锁争用

    我正在尝试创建一个小基准 在 Groovy 中 以显示几个同步方法上的高线程争用 当监控自愿上下文切换时 应该会出现高争用 在 Linux 中 这可以通过 pidstat 来实现 程序如下 class Res private int n s
  • Java 类:匿名类、嵌套类、私有类

    有人能解释一下Java中匿名类 嵌套类和私有类之间的区别吗 我想知道与每个相关的运行时成本以及每个编译器的方法 这样我就可以掌握哪个最适合用于例如性能 编译器优化的潜力 内存使用以及其他 Java 编码人员的普遍可接受性 我所说的匿名类是指
  • Java:为什么它使用固定数量的内存?或者它如何管理内存?

    JVM 似乎使用了一些固定数量的内存 至少我经常看到参数 Xmx 对于最大尺寸 和 Xms 对于初始大小 这表明 我感觉 Java 应用程序不能很好地处理内存 我注意到一些事情 即使一些非常小的示例演示应用程序也会加载大量内存 也许这是因为
  • OQL 包中的所有实例

    是否有可能在OQL检索属于一个包的所有对象 或者我可以查询wildcards 正如 haridsv 建议我尝试过的 SELECT from com example and SELECT a from com example but in V
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 使用 libjvm.so 时出现 Sigsegv Java 致命错误

    我正在做重启测试Sles12sp2 using STAF v3 4 24一段时间后我收到此错误 A fatal error has been detected by the Java Runtime Environment SIGSEGV
  • ASM之前看一下maxStack指令吗?

    我正在尝试使用 ASM 库将字节代码转换为不同的格式 这可以使用 MethodVisitor 来完成 就像这个简单的测试代码一样 return new MethodVisitor ASM7 Override public void visi
  • 使用 Coldfusion 11 的 CFdirectory,文件名中存在非 ASCII 字符问题

    我有一个类似的问题 ColdFusion CFDirectory 和法语 https stackoverflow com questions 1715632 coldfusion cfdirectory and the french从而没有
  • Java 堆分析因 SIGABRT 崩溃

    我正在尝试分析由 C 编写的方法分配并插入的本机内存JVM通过JNI 我安装了 valgrind version valgrind 3 13 0 并尝试使用以下选项运行 JVM valgrind tool massif massif out
  • JVM锯齿状空闲进程

    我目前正在进行一项涉及 JVM 及其内存使用工作原理的研究 我不明白的是 JVM在空闲时用什么填充它的内存 只是为了在堆几乎达到时释放它 为什么使用的内存不只有一条平线 顺便说一句 这个 java 应用程序托管在 glassfish 上 但
  • 使用同一类的不同版本进行类加载:java.lang.LinkageError:尝试重复名称的类定义

    我有一个工作代码 可以动态加载具有不同类名的不同类实现 类文件被加载到内存数据库 Apache 德比数据库 类加载器检索 class文件来自BLOB列 我想做的是插入 class文件为带有版本列的二进制 BLOB 和IS ENABLED标志
  • java内存不足然后退出

    我有一个必须分析大文件的软件 限制输入或提供无限内存都不是一个选择 所以我必须忍受飞行的 OOME 因为 OOME 只杀死线程 所以我的软件运行在一些糟糕的状态 从外面看一切都很好 因为进程正在运行 但在内部却是脑死亡 我想拔掉它的插头 但
  • 在 Android 上运行 Java 字节码 - DalvikVM 之上的 Sun JVM

    由于 java 实现 OpenJDK 和Android的虚拟机DalvikVM是开源的 因此必须可以在Google的DalvikVM之上实现Sun的JavaVM 这将使运行基于 JVM 的应用程序和语言成为可能 Clojure Jython
  • 从 Java 内部限制 CPU

    我在这个 和其他 论坛中看到了许多具有相同标题的问题 但似乎没有一个问题能完全解决我的问题 就是这个 我有一个 JVM 它占用了托管它的机器上的所有 CPU 我想限制它 但是我不能依赖任何限制工具 技术external到 Java 因为我无
  • 限制 Java 进程的总内存消耗(在 Cloud Foundry 中)

    与这两个问题相关 如何设置JVM的最大内存使用量 https stackoverflow com questions 1493913 how to set the maximum memory usage for jvm 什么会导致 jav
  • 哪个更快:instanceof 或 isInstance?

    抛开设计问题不谈 什么在现代 JVM 上执行得更快 foo instanceof Bar or Bar class isInstance foo Why Class isInstance是 JVM 固有的 它被编译为与instanceof完
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • VisualVM v1.4.4 中的 OQL - 获取类的字段名称

    我想执行 OQL 查询 https htmlpreview github io https raw githubusercontent com visualvm visualvm java net backup master www oql

随机推荐

  • fatal: Authentication failed for ‘https://github.com

    记录在本地电脑建立与GitHub连接时遇到的错误 附上解决方案 git clone 遇到的错误 remote Support for password authentication was removed on August 13 2021
  • osx 常用defaults命令

    defaults命令用来对mac os x系统进行某些设置 常用命令 查看所使用的defaults命令 history grep defaults 分类查看defaults命令 history grep defaults write his
  • JavaScript数据结构——字典(Dictionary)

    概念和结构 字典里面的元素都是一个键 key 值 value 对 字典里面的元素的键 key 不能重复 值 value 可以重复 字典的操作 字典有八种常用操作 分别为 检查键是否存在 has key 添加元素 set key value
  • js 搜索模糊匹配

    searchvalue list keyWord if keyWord var reg new RegExp keyWord var arr for var i 0 i lt list length i if reg test list i
  • Java8-对List转换Map、分组、求和、过滤

    前言 在java8之后我们list转map再也不用循环put到map了 我们用lambda表达式 使用stream可以一行代码解决 下面我来简单介绍list转map的几种方式 和转为map后对map进行分组 求和 过滤等操作 正文 数据准备
  • C#实现百度地图附近搜索&调用JavaScript函数

    前一篇文章 C 调用百度地图API入门 解决BMap未定义问题 讲述了如何通过C 调用百度API显示地图 并且如何解决BMap未定义的问题 这篇文章主要更加详细的介绍百度地图的一些功能 包括附近搜索 城市搜索 路线规划 添加覆盖物等等 希望
  • ipv6的链路本地地址

    目录 简介 先决条件 要求 使用的组件 规则 配置 网络图 配置 验证 检验 OSPF 的配置 正在验证的链路本地地址可接通性 ping从远程网络的链路本地地址 直接ping从连接的网络的链路本地地址 相关信息 简介 本文目的将提供对在网络
  • Qt漂亮界面

    Qt漂亮界面 功能规划 一 去掉菜单栏和工具栏 二 顶部导航栏的设计 appinit h头文件 appinit cpp的文件 使用方式 三 阵列按钮的点击事件写法 四 重写缩写界面 放大界面和关闭程序事件 五 鼠标事件的处理 Qt大量同类控
  • mysql数据库内容导出,MySql数据库导出

    Navicat Premium Data Transfer Source Server 刘文鹏 Source Server Type MySQL Source Server Version 50540 Source Host 127 0 0
  • 关于X79主板至强E5 CPU安装ArchLinux的记录

    最近想在家里搭网站 打算弄两台服务器 一个是旧机器x79主板的 作为AI绘图和Chatglm部署用 一个新买的是带有N5095的小板子 装了CentOS7来当web服务器 当作前置服务器 主要为外网提供服务 装CentOS7比较简单容易 所
  • TransFusion:利用 Transformer 进行鲁棒性融合来进行 3D 目标检测

    Query 初始化 Input dependent 以往 Query 位置是随机生成或学习作为网络参数的 而与输入数据无关 因此需要额外的阶段 解码器层 来学习模型向真实对象中心移动的过程 论文提出了一种基于center heatmap 的
  • VC6.0使用教程

    使用之前我们先准备一段代码 include
  • C#将依赖的DLL文件集成到EXE内部

    使用场景 C 写的一些小程序 为了方便传播 减少传播文件数量 将依赖的DLL文件集成到EXE内部是必要的 解决方案 打开 管理NuGet程序包 在浏览中搜索 Costura Fody 点击 安装 按钮 等待下载依赖及安装完成 重新编译软件
  • 操作系统7-信号量与管程

    回顾一下 并发问题 多线程并发导致资源竞争 同步概念 1 协调多线程对共享数据的访问 2 任何时刻只能由一个线程执行临界区代码 确保同步正确的方法 底层硬件支持 高层次的编程抽象 锁 信号量是锁机制在同一层上的高层抽象编程方法 一 信号量s
  • html如何设置网页的背景图片

    div div
  • Web安全面试题之-信息搜集(1)

    1 信息收集如何处理子域名爆破的泛解析问题 根据一个不存在的子域名的解析IP 来记录获取黑名单 IP 在爆破字典时 如果解析的IP在这个黑名单中 则默认跳过 如果不存在 我们则入库处理 还有一种泛解析的爆破处理方式是根据TTL来做判断 我们
  • 【Linux基础及shell脚本】Shell脚本中变量的使用

    文章目录 1 Shell变量基础 1 1 什么是变量 1 2 如何在Shell中定义和使用变量 2 Shell环境变量 2 1 什么是环境变量 2 2 环境变量与普通变量的区别 2 3 如何查看 设置和删除环境变量 3 Shell位置参数
  • 串口通信及中断

    异步通信 发送和接收数据的双方用各自的时钟控制数据的发送和接收 为降低数据传输的错误率要求双方时钟尽可能一致 异步通信以帧为单位传送数据 由于每帧数据都具有起始位和停止位所以两帧数据之间的间隔时间不影响数据传送和接收的准确率 但是每帧数据内
  • Git 笔记 - git commit

    文章目录 01 git commit 02 git commit m 03 git commit a 04 git commit p 05 git commit C 06 git commit c 07 git commit n 08 gi
  • 关于Map、WeakMap、Set 、WeakSet

    在计算机程序中 弱引用与强引用相对 是指不能确保其引用的对象不会被垃圾回收器回收的引用 一个对象若只被弱引用所引用 则被认为是不可访问的 或弱访问的 并因此可能在任何时刻被回收 Map Map 它类似于对象 也是键值对的集合 并且能够记住键