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

相关文章

Java Map排序如何按照值按照键排序

《JavaMap排序如何按照值按照键排序》该文章主要介绍Java中三种Map(HashMap、LinkedHashMap、TreeMap)的默认排序行为及实现按键排序和按值排序的方法,每种方法结合实... 目录一、先理清 3 种 Map 的默认排序行为二、按「键」排序的实现方式1. 方式 1:用 TreeM

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

shell中set -u、set -x、set -e的使用

《shell中set-u、set-x、set-e的使用》本文主要介绍了shell中set-u、set-x、set-e的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录✅ 1. set -u:防止使用未定义变量 作用: 示例:❌ 报错示例输出:✅ 推荐使用场景:✅ 2. se

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M