map的克隆

来源:互联网 发布:网络课程的英文 编辑:程序博客网 时间:2024/05/22 12:01

例一:map对象引用复制,只是简单的引用,解决不了问题

package com.evada.de;import java.util.HashMap;import java.util.Map;/** * Created by Ay on 2016/5/11. */public class RedisTest {    public static void main(String[] args) {        Map<String,String> mapAA = new HashMap<>();        mapAA.put("A", "A");        mapAA.put("AA","AA");        mapAA.put("AAA","AAA");        System.out.println(mapAA);        //用mapBB对象去引用mapAA        Map<String,String> mapBB = mapAA;        mapBB.put("B","B");        System.out.println(mapBB);    }}

结果:

{AA=AA, A=A, AAA=AAA}{AA=AA, A=A, AAA=AAA, B=B}

例二:Map中的putAll实现简单类型的复制

package com.evada.de;import java.util.HashMap;import java.util.Map;/** * Created by Ay on 2016/5/11. */public class RedisTest {    public static void main(String[] args) {        Map<String,String> mapAA = new HashMap<>();        mapAA.put("A", "A");        mapAA.put("AA","AA");        mapAA.put("AAA","AAA");        System.out.println(mapAA);        Map<String,String> mapBB = new HashMap<>();        //把mapAA的元素复制到mapBB中        mapBB.putAll(mapAA);        mapBB.put("B","B");        //打印出的mapAA应该不受影响        System.out.println(mapAA);        //打印出的mapBB应该多了元素B        System.out.println(mapBB);    }}

结果:

{AA=AA, A=A, AAA=AAA}{AA=AA, A=A, AAA=AAA}{AA=AA, A=A, AAA=AAA, B=B}

例三:map中putAll只是浅复制

package com.evada.de;import java.util.HashMap;import java.util.Map;class Person{    private String id,name;    Person(String id,String name){        this.id = id;        this.name = name;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}/** * Created by Ay on 2016/5/11. */public class RedisTest {    public static void main(String[] args) {        Map<String,Person> mapAA = new HashMap<>();        mapAA.put("A",new Person("AID","AY"));        mapAA.put("B",new Person("BID","AL"));        System.out.println(mapAA);        Map<String,Person> mapBB = new HashMap<>();        /** 把mapAA中的元素复制到mapBB中 **/        mapBB.putAll(mapAA);        /** 修改mapBB中A元素值,如果mapAA中的元素A受影响,说明是浅复制 **/        Person person = mapBB.get("A");        person.setName("Ay_New");        System.out.println(mapBB);        System.out.println("mapAA  的A元素value值:" + mapAA.get("A").getName());    }}

结果:从结果可以看出,打印mapAA 和mapBB,结果是一样的,说明putAll的复制自己简单的浅复制, 
从最后一个结果,可再一次验证,因为改了mapBB中A元素的值,直接影响到mapAA中元素的值

{A=com.evada.de.Person@71bc1ae4, B=com.evada.de.Person@6ed3ef1}{A=com.evada.de.Person@71bc1ae4, B=com.evada.de.Person@6ed3ef1}mapAA  的A元素value值:Ay_New

如何实现深复制呢,可以看我的一篇关于《论clone深层复制和浅层复制》文章

原创粉丝点击