疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java之Map对象复制小例子


 

 
提出问题
 
Map对象的简单复制问题????
 
解决问题
 
例一: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;
/**
 
 */
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