Map拷贝 关于对象深拷贝 浅拷贝的问题
2017-01-10 11:22
351 查看
关于Map的深拷贝,并不是说,用了putAll就能搞定,不多说,直接上代码:
{key1=3}
{key1=3}
--------------------------------------------------------------
{key1=3}
{key1=1}
--------------------------------------------------------------
{key1=Dog{name='Dog1'}}
{key1=Dog{name='dog3'}}
--------------------------------------------------------------
{key5=Dog{name='Dog5'}}
{key5=Dog{name='Dog5'}}
public class CopyMap {
public static void main(String[] args) {
Map<String, Integer> map11 = new HashMap<String, Integer>();
map11.put("key1", 1);
Map<String, Integer> map22 = map11;
map11.put("key1", 3);
System.out.println(map11);
System.out.println(map22);
System.out.println("--------------------------------------------------------------");
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("key1", 1);
Map<String, Integer> map2 = new HashMap<String, Integer>();
map2.putAll(map1);
map1.put("key1", 3);
System.out.println(map1);
System.out.println(map2);
System.out.println("--------------------------------------------------------------");
Map<String, Dog> map3 = new HashMap<String, Dog>();
Dog dog1 = new Dog("Dog1");
map3.put("key1", dog1);
Map<String, Dog> map4 = new HashMap<String, Dog>();
map4.putAll(map3);
System.out.println(map4);
map3.get("key1").setName("dog3");
System.out.println(map4);
System.out.println("--------------------------------------------------------------");
Map<String, Dog> map5 = new HashMap<String, Dog>();
Dog dog5 = new Dog("Dog5");
map5.put("key5", dog5);
Map<String, Dog> map6 = (Map<String, Dog>) deepClone(map5);
System.out.println(map6);
map5.get("key5").setName("Dog7");
System.out.println(map6);
}
public static Object deepClone(Object obj) {
try {// 将对象写到流里
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(obj);// 从流里读出来
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi = new ObjectInputStream(bi);
return (oi.readObject());
} catch (Exception e) {
return null;
}
}
}
class Dog implements Serializable {
private String name;
public Dog(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override public String toString() {
return "Dog{" + "name='" + name + '\'' + '}';
}
}
{key1=3}
{key1=3}
--------------------------------------------------------------
{key1=3}
{key1=1}
--------------------------------------------------------------
{key1=Dog{name='Dog1'}}
{key1=Dog{name='dog3'}}
--------------------------------------------------------------
{key5=Dog{name='Dog5'}}
{key5=Dog{name='Dog5'}}
public class CopyMap {
public static void main(String[] args) {
Map<String, Integer> map11 = new HashMap<String, Integer>();
map11.put("key1", 1);
Map<String, Integer> map22 = map11;
map11.put("key1", 3);
System.out.println(map11);
System.out.println(map22);
System.out.println("--------------------------------------------------------------");
Map<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("key1", 1);
Map<String, Integer> map2 = new HashMap<String, Integer>();
map2.putAll(map1);
map1.put("key1", 3);
System.out.println(map1);
System.out.println(map2);
System.out.println("--------------------------------------------------------------");
Map<String, Dog> map3 = new HashMap<String, Dog>();
Dog dog1 = new Dog("Dog1");
map3.put("key1", dog1);
Map<String, Dog> map4 = new HashMap<String, Dog>();
map4.putAll(map3);
System.out.println(map4);
map3.get("key1").setName("dog3");
System.out.println(map4);
System.out.println("--------------------------------------------------------------");
Map<String, Dog> map5 = new HashMap<String, Dog>();
Dog dog5 = new Dog("Dog5");
map5.put("key5", dog5);
Map<String, Dog> map6 = (Map<String, Dog>) deepClone(map5);
System.out.println(map6);
map5.get("key5").setName("Dog7");
System.out.println(map6);
}
public static Object deepClone(Object obj) {
try {// 将对象写到流里
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(obj);// 从流里读出来
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi = new ObjectInputStream(bi);
return (oi.readObject());
} catch (Exception e) {
return null;
}
}
}
class Dog implements Serializable {
private String name;
public Dog(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override public String toString() {
return "Dog{" + "name='" + name + '\'' + '}';
}
}
相关文章推荐
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- C++之模板类(Template) 容器之map 及 对象副本 深/浅拷贝 等问题
- 关于OC对象拷贝的问题
- C++之模板类(Template) 容器之map 及 对象副本 深/浅拷贝 等问题
- map对象拷贝问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- javascript关于对象深拷贝和数组去重的问题...
- 关于OC对象拷贝的问题
- C++模板类 容器之map及对象副本 深/浅拷贝等问题浅析
- [WEB前端开发]-关于Velocity中Map与List操作-解决velocity无法识别Map对象key的问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- 关于对象,对象数组,数组,数组对象直接拷贝、浅拷贝、深拷贝问题的总结
- 关于对象深拷贝和数组去重的问题...
- Java中关于Map对象中改变Key值的问题
- [求助]关于服务器之间的文件拷贝问题,没有头绪,希望大家指点一二