您的位置:首页 > 其它

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 + '\'' + '}';
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: