Map拷贝 关于对象深拷贝 浅拷贝的问题
关于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 + """ + "}"; } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。