java map深拷贝_java 实现Map的深复制
在java中有一个比较有趣的特性,在对对象进行=赋值,或者clone时候一般都是我们所说的浅复制,
Object A = B;
也就是说我们获取的并非在堆中重新分配的一块内存,而是一个指向原有数据内存的一个引用。
这样的后果就是我们修改了A中的属性,那么B的属性也会同时发生变化,因为他们两个本身就指向同一个对象,所以变化一个另外一个也随着变化。
在Map中提供的一个putAll方法,可以部分解决这个问题,(为什么是部分呢?因为putAll方法只能对基本数据类型进行深复制,对于对象类型完全也是无力),因此急需一个好的解决方案来进行对象的深复制
有一个方法是,使用序列化Serializable这个接口可以完成深拷贝的操作,但遗憾的是Map对象并没有实现Serializable接口,不能直接对接口进行深复制操作。
public interface Map {...}
但是作为Map的子类,HashMap实现了Serialization,因此可以通过以下的方式实现深复制。
@SuppressWarnings("unchecked")
public static T clone(T obj) {
T clonedObj = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
clonedObj = (T) ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
return clonedObj;
}
java map深拷贝_java 实现Map的深复制相关推荐
- java字符串深克隆_Java中对象的深复制(深克隆)和浅复制(浅克隆)之序列化...
1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. 举 ...
- java遍历一个map集合_Java遍历Map集合的四种方式
Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map 的接口类(如 HashMap.Tr ...
- java 定义map集合_java基础-Map集合
java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...
- java entryset循环_Java之Map遍历方式性能分析:ketSet 与 entrySet
keySet():将Map中所有的键存入到Set集合中.因为set具备迭代器,所以可以以迭代方式取出所有的键,再根据get方法获取每一个键对应的值,其仅能通过get()取key. entrySet() ...
- java list map嵌套_Java 集合-Map集合嵌套 的遍历四种方式
1 public static voidmain(String[] args) {2 3 HashMap> map = new HashMap>();4 5 HashMap mapin1 ...
- java map 实例_java中map集合嵌套形式简单示例
定义了一个学生类,封装了id和name属性,提供一个全参构造器,并复写toSting方法 class Student{ private String id; private String name; ...
- java多层map遍历_java中map的多层遍历
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Map> testmap=new HashMap>();Map user1=new HashMap();user1.put(1, (float ...
- java clone 深复制_Java的clone():深复制与浅复制
Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法,如下: 1 public class Student implements Cloneable { ...
- java map遍历_Java中Map集合的两种遍历方式
Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...
最新文章
- Hive常用函数大全一览
- php常量数组吗,包含数组的PHP常量?
- WCF学习之旅—WCF寄宿前的准备(八)
- popup a new windows
- 【SpringCloud】Ribbon 负载均衡
- 《区块链开发指南》一一导读
- 拆分SharePoint 2013 中CreatedModifiedInfo 的时间
- Grep命令学习笔记(转)
- 传输表空间--使用Rman方式
- L298N模块详细使用教程
- 在麒麟V10服务器上编译安装Storm
- 推荐一个好用的开源的报表平台——JNPF可视化平台
- oppo手机计算机的隐藏功能介绍,OPPO手机6大隐藏功能,你知道吗
- Delphi实现shell扩展
- 原生JS中DOM节点相关API合集
- STM32F4单电梯调度系统(扫描算法)
- 公告——实现两个公告同屏滚动轮播(elementUi-走马灯效果实现)
- 股市投资必修课二十---对DCF三要素应持有的正确认知和理解
- 深圳第25届华南国际工业自动化、机器视觉及工业应用展览会(免费)
- MySQL使用存储过程批量插入数据
热门文章
- OpenCV(22)SIFT尺度不变特征变换(纯理论)
- 【opencv】(13) 案例:停车场空余车位检测,附python完整代码
- 【TensorFlow2.0】(4) 维度变换、广播
- python还是r_Python和R到底该学哪个呢
- Blender灯光照明与渲染视频教程 Skillshare – Blender: Product rendering for beginners
- 风格化手绘纹理包 CGTrader – Stylized Mix Vol. 41 – Hand Painted Texture Pack
- C++的STL队列实现栈
- java中JVM的原理【转】
- 米勒罗宾素性测试(Miller–Rabin primality test)
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)