java Map 复制和对象的复制
来源:互联网 发布:淘宝龙桃子剑装强袭 编辑:程序博客网 时间:2024/06/11 00:20
A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。
序列化和反序列化 Serializable
序列化的对象要实现Serializable接口才能实现序列化。
序列化后,通过反序列化可以得到和当前对象一样的对象。
@SuppressWarnings("unchecked")public static <T extends Serializable> 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;
}
程序案例:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ObjectCp {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("*************关于Map的复制****************");
cpmap();
System.out.println("*************关于对象的复制****************");
objus();
}
public static void objus()
{
user ur= new user(1,"qq",23,"ww");
user ur2=ur;
System.out.println("数据展示");
System.out.println(ur.toString());
System.out.println(ur2.toString());
System.out.println("修改属性值后数据展示");
ur.setAge(88);
System.out.println(ur.toString());
System.out.println(ur2.toString());
System.out.println("序列化后修改属性值后数据展示");
ur2= clone(ur);
ur.setAge(11);
System.out.println(ur.toString());
System.out.println(ur2.toString());
}
public static void cpmap()
{
String str="ppppp";
List<Integer> list = new ArrayList<Integer>();
list.add(100);
list.add(200);
HashMap<String,Object> map = new HashMap<String,Object>();
//放基本类型数据
map.put("basic", 100);
map.put("str", str);
//放对象
map.put("list", list);
HashMap<String,Object> mapNew = new HashMap<String,Object>();
mapNew.putAll(map);//只对 基本类型和String 类型有效,对象类型无效
System.out.println("----数据展示-----");
System.out.println(map);
System.out.println(mapNew);
System.out.println("----更改基本类型数据-----");
map.put("basic", 200);
System.out.println(map);
System.out.println(mapNew);
System.out.println("----更改引用类型数据-----");
list.add(300);
mapNew.put("str", "wwwwwwww");
System.out.println(map);
System.out.println(mapNew);
System.out.println("----使用序列化进行深拷贝-----");
mapNew = clone(map);
list.add(400);
map.put("str", "mmmmmmm");
System.out.println(map);
System.out.println(mapNew);
System.out.println("----使用序列化进行深拷贝-----");
HashMap<String,Object> mapNews = new HashMap<String,Object>();
mapNews = clone(map);
list.add(500);
mapNews.put("str", "wwwwwwww");
System.out.println(map);
System.out.println(mapNews);
}
@SuppressWarnings("unchecked")
public static <T extends Serializable> 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;
}
}
class user implements Serializable{
user(int uid,String uname,int age,String up)
{
this.uid=uid;
this.uname=uname;
this.age=age;
this.up=up;
}
private int uid;
private String uname;
private int age;
private String up;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getUp() {
return up;
}
public void setUp(String up) {
this.up = up;
}
public String toString()
{
return String.format("uid:%d,uname:%s,age:%d,up:%s",uid,uname,age,up);
}
}
结论:
1.Map 对象 使用putall 可是实现对基本类型和String类型的深度复制,对引用类型必须通过序列化与反序列化处理。
2.对象间的复制,使用序列化进行深度复制。
- java Map 复制和对象的复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制
- 细说java对象的浅复制和深复制
- Java对象的深复制和浅复制
- Java对象的深复制和浅复制详解
- java对象的复制
- java对象的复制
- JAVA的对象复制
- java对象的复制
- java对象的复制
- java对象的复制
- java对象深层复制和浅复制
- Java之Map对象复制小例子
- Java之Map对象复制小例子
- 单片机嵌入式初赛--KingSton
- Android Activity启动流程源码解析
- swift delegate
- innodb buffer pool
- unity导弹算法--预计目标点
- java Map 复制和对象的复制
- Object-C之数组
- (iOS开发)百度地图SDK使用以及学习
- 王学岗android开发之性能优化
- pypi换源
- hdu 5912 Fraction 2016中国大学生程序设计竞赛(长春) 水题
- php mysql apache 配置
- Android 闪退后重启方案
- mosquitto 下 SYS下的主题内容