首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Map复制给新Map时,用 “=、clone、还是putAll”?论Map的深复制和浅复制

使用.clone()方法 测试用例 测试用例源码 使用场景 在我们最初使用map复制开发业务代码时,通常会踩到深浅复制(拷贝)这个坑里,比如我,在Map复制时 (如:Map new_Map = old_Map) 出现过以下两类问题: 1.使用Map new_Map = old_Map 操作,当修改new_Map属性后,old_Map属性也跟着变了...都是基本类型,就不涉及深浅拷贝的问题) 尝试过的办法 1. “=”赋值 新建一个Map,然后使用“=”直接赋值,这样只是复制了old_Map的引用,和old_Map仍使用同一个内存区域,所以,在修改new_Map...使用.putAll()方法 创建一个新的Map结构,使用putAll()方法把原先的Map添加到新的Map中,但是发现修改了副本的Map之后,原先的Map中数据也被修改了;(源码如下) public...使用.clone()方法 HashMap自带了一个clone()方法,但是,它的源码中注释说明了也只是一种浅复制(拷贝):(源码如下) @Override public Object clone

3.8K31
您找到你想要的搜索结果了吗?
是的
没有找到

js Map用法

作为 ECMAScript 6 的新增特性,Map 是一种新的集合类型,为这门语言带来了真正的键/值存储机制。Map 的大多数特性都可以通过 Object 类型实现,但二者之间还是存在一些细微的差异。...创建 使用 new 关键字和 Map 构造函数可以创建一个空映射: const m = new Map(); 如果想在创建的同时初始化实例,可以给 Map 构造函数传入一个可迭代对象,需要包含键/值对数组...but,but,如果比较注重性能的话就有必要使用Map了: 选择 Object 还是 Map 对于多数 Web 开发任务来说,选择 Object 还是 Map 只是个人偏好问题,影响不大。...如果代码涉及大量插入操作,那么显然 Map 的性能更佳。...而对大多数浏览器引擎来说,Map 的 delete()操作都比插入和查找更快。 如果代码涉及大量删除操作,那么毫无疑问应该选择 Map

8K30

JS深浅复制

❝焦虑很多时候就是因为想的太多 ❞ 简明扼要 JS在语言层面「仅支持浅复制」,深复制需要手动实现 instanceof 判断的是 a和A是否有「血缘关系」 扩展运算符在副本中「直接定义新的属性」 Object.assign...浅复制 VS 深复制 针对JS引用类型数据(复杂数据)的复制,有两种处理模式。...❝JS在语言层面「仅支持浅复制」,深复制需要手动实现 ❞ ---- 2. 浅谈浅复制JS中,存在几个内置属性天然支持数据浅复制,但是每个属性都有一定的适用条件和范围。...扩展运算符不能复制内置对象的特殊属性 我们在前面介绍JS数据类型的时候,介绍了在浏览器宿主环境下,JS = ECMAScript + DOM + BOM。...深复制 JS中深复制需要手动实现、 3.1 通过嵌套扩展运算符实现深复制 const original = {name: '789', work: {address: 'BeiJing'}}; const

4.1K20

js forEach和 map 区别

因为 map 生成一个新数组,当你不打算使用返回的新数组却使用 map 是违背设计初衷的,请用 forEach 或者 for-of 替代。...如果有以下情形,则不该使用 map: 你不打算使用返回的新数组;或 你没有从回调函数中返回值。...调用 map 方法之后追加的数组元素不会被 callbackFn 访问。如果存在的数组元素改变了,那么传给 callbackFn 的值是 map 访问该元素时的值。...在 map 函数调用后但在访问该元素前,该元素被删除的话,则无法被访问到。 根据规范中定义的算法,如果被 map 调用的数组是离散的,新数组将也是离散的保持相同的索引为空。...map因为返回数组所以可以链式操作,forEach不能

4.6K30

js复制方法总结

js中有深拷贝和浅拷贝两种复制形式,下面总结一下常用方法,方便平时工作复习使用 一、浅拷贝 1、json对象浅拷贝 var newObj = JSON.parse(JSON.stringify( someObj...} = require('immutable') const map1 = Map({ a: 1, b: 2, c: 3 }) const map2 = map1.set('b', 50) map1....5、JSON对象的方法 var obj2 = JSON.parse(JSON.stringify(obj1)) 熟悉js的人对这两个方法肯定不陌生,利用原生JSON对象的两个可以非常方便地实现对象的深复制...这种方法也有弊端: 只能复制能用json表示的属性,比如String、Number、Array等,对于不能用json表示的属性例如Function、Regexp等则会丢失 对象的原型链丢失 复制效率较低...但是这种方式也没有考虑Function、Regexp、Error等类型,需要更多的判断,但是核心思想也还是递归遍历对象复制,另外这种方式比JSON的深复制效率稍高。

3.4K40

js数组浅拷贝_js数组深度复制

浅拷贝:创建一个新的对象,来接受重新复制或引用的对象值。...如果对象属性是基本的数据类型,复制的就是基本类型的值给新对象;但如果属性是引用数据类型,复制的就是内存中的地址,如果其中一个对象改变了这个内存中的地址,会影响到另一个对象,因为两者共同指向同一个地址。...方法三,结合map(将方法二的递归改造,解决循环引用问题): var deepCopy = function (target, map = new Map()) { // 只拷贝对象 if (typeof...== "object") return target; // 克隆数据之前,先判断之前是否有克隆过(解决循环引用的问题) let cache = map.get(target); if (cache)...[] : { }; // 将新的结果存到容器中 map.set(target, result); for (var key in target) { // 遍历obj,并且判断是obj的属性才拷贝

13.1K50
领券