您的位置:首页 > 编程语言 > Java开发

Java之Map对象复制小例子

2016-08-11 21:45 381 查看
 


Java之Map对象复制小例子

标签: java
2016-05-19 22:34 73人阅读 评论(0) 收藏 举报


 分类:
 

一步一步学Java(23) 


版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

开心一笑



提出问题

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;

/**
* 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深层复制和浅层复制》文章

读书感悟

来自《千余千寻》
人生就是一列开往坟墓的列车,路途上会有很多站,很难有人可以自始至终陪着走完。当陪你的人要下车时,即使不舍也该心存感激,然后挥手道别。
不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。
曾经发生过的事情不会忘记,只是想不起来而已。

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: