開(kāi)心一笑
笑話.png
提出問(wèn)題
Map對(duì)象的簡(jiǎn)單復(fù)制問(wèn)題????
解決問(wèn)題
例一:map對(duì)象引用復(fù)制,只是簡(jiǎn)單的引用,解決不了問(wèn)題
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對(duì)象去引用mapAA
Map<String,String> mapBB = mapAA;
mapBB.put("B","B");
System.out.println(mapBB);
}
}
結(jié)果:
{AA=AA, A=A, AAA=AAA}
{AA=AA, A=A, AAA=AAA, B=B}
例二:Map中的putAll實(shí)現(xiàn)簡(jiǎn)單類型的復(fù)制
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的元素復(fù)制到mapBB中
mapBB.putAll(mapAA);
mapBB.put("B","B");
//打印出的mapAA應(yīng)該不受影響
System.out.println(mapAA);
//打印出的mapBB應(yīng)該多了元素B
System.out.println(mapBB);
}
}
結(jié)果:
{AA=AA, A=A, AAA=AAA}
{AA=AA, A=A, AAA=AAA}
{AA=AA, A=A, AAA=AAA, B=B}
例三:map中putAll只是淺復(fù)制
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中的元素復(fù)制到mapBB中 **/
mapBB.putAll(mapAA);
/** 修改mapBB中A元素值,如果mapAA中的元素A受影響,說(shuō)明是淺復(fù)制 **/
Person person = mapBB.get("A");
person.setName("Ay_New");
System.out.println(mapBB);
System.out.println("mapAA 的A元素value值:" + mapAA.get("A").getName());
}
}
結(jié)果:從結(jié)果可以看出,打印mapAA 和mapBB,結(jié)果是一樣的,說(shuō)明putAll的復(fù)制自己簡(jiǎn)單的淺復(fù)制,
從最后一個(gè)結(jié)果,可再一次驗(yàn)證,因?yàn)楦牧薽apBB中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
如何實(shí)現(xiàn)深復(fù)制呢,可以看我的一篇關(guān)于《論clone深層復(fù)制和淺層復(fù)制》文章
讀書(shū)感悟
來(lái)自《千余千尋》
- 人生就是一列開(kāi)往墳?zāi)沟牧熊嚕吠旧蠒?huì)有很多站,很難有人可以自始至終陪著走完。當(dāng)陪你的人要下車時(shí),即使不舍也該心存感激,然后揮手道別。
- 不管前方的路有多苦,只要走的方向正確,不管多么崎嶇不平,都比站在原地更接近幸福。
- 曾經(jīng)發(fā)生過(guò)的事情不會(huì)忘記,只是想不起來(lái)而已。