Map、WeakMap和set、WeakSet

2024-01-15 02:20
文章标签 set map weakmap weakset

本文主要是介绍Map、WeakMap和set、WeakSet,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Map

map是一个键名和键值可以是任意类型的键值对集合,它按照键值对的插入顺序来排列,如果给同一个键名插入键值,后者会覆盖前者

let map = new Map()
map.set(1, 1)
map.set('string', 'string')
map.set({'1': '1'}, {'1': '1'})
console.log(map)

在这里插入图片描述

可以通过给Map构造函数传入一个二位数组作为键值对集合初始化一个map结构的变量

let map = new Map([[1,2],[3,4]])
Map的属性和方法
let map = new Map([[1,2],[3,4]])
map.set('1',2)
map.get('1')
map.size
map.delete('1')
map.entries()
map.has(1)
map.keys()
map.values()
map.clear()

WeakMap

weakMap是一个键名只能为对象引用的键值对集合,键名对象的引用也只是弱引用,若外部没有这个对象的强引用,那么这个对象随时有可能会被垃圾回收,所以weakMap不可枚举,不可清空,也没有size属性。

在这里插入图片描述

node执行查看内存变化
function formatByte(bytes) {return (bytes/1024/1024).toFixed(2) + 'MB'
}function print () {global.gc()let memoryUsage = process.memoryUsage()console.log(formatByte(memoryUsage.heapUsed));
}let map = new Map()
print()
let arr = new Array(1024*1024)
map.set(arr, '1')
print()
arr = null
print()

global.gc()会执行一次垃圾回收,需要在使用node命令是加上–expose-gc参数

在这里插入图片描述

let weakMap = new WeakMap()
print()
let arr = new Array(1024*1024)
weakMap.set(arr, '1')
print()
arr = null
print()

在这里插入图片描述

set

不重复的类数组集合,成员可以是任何类型并且是唯一的。在Set中两个对象总是不相等的,原因是对象是引用值,存储地址不同。

set的属性和方法
let set = new Set()
set.add('1') // 添加某个值,返回Set结构本身。
set.has('1') // 返回一个布尔值
set.delete('1') // 返回一个布尔值
set.clear() // 清除所有成员,没有返回值
set.size
set.entries()
set.keys()
set.values()
set.forEach()

数组去重

let arr = [...new Set([1,1,2,2,3])]

WeakSet

不重复集合,成员只能是对象的引用,也属于弱引用,特性基本与weakMap相同

这篇关于Map、WeakMap和set、WeakSet的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/607333

相关文章

JavaScript中的Map用法完全指南

《JavaScript中的Map用法完全指南》:本文主要介绍JavaScript中Map用法的相关资料,通过实例讲解了Map的创建、常用方法和迭代方式,还探讨了Map与对象的区别,并通过一个例子展... 目录引言1. 创建 Map2. Map 和对象的对比3. Map 的常用方法3.1 set(key, v

Golang中map缩容的实现

《Golang中map缩容的实现》本文主要介绍了Go语言中map的扩缩容机制,包括grow和hashGrow方法的处理,具有一定的参考价值,感兴趣的可以了解一下... 目录基本分析带来的隐患为什么不支持缩容基本分析在 Go 底层源码 src/runtime/map.go 中,扩缩容的处理方法是 grow

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds  总结  fd_set操作接口  timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充  获取新连接 注意点 -- 通信时的调用函数 添加新fd到

Android set Tag, findViewWithTag使用

设置了tag为“principal”的view ImageView principal = (ImageView) findViewById(R.id.imagen_home_0);principal.setTag("principal"); 在其它地方获取,获取已经设置了tag为“principal”的view LayoutInflater inflater = LayoutInflate