Java之Map對象復制小例子

開心一笑

笑話.png

提出問題

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深層復制和淺層復制》文章

讀書感悟

來自《千余千尋》

  • 人生就是一列開往墳墓的列車,路途上會有很多站,很難有人可以自始至終陪著走完。當陪你的人要下車時,即使不舍也該心存感激,然后揮手道別。
  • 不管前方的路有多苦,只要走的方向正確,不管多么崎嶇不平,都比站在原地更接近幸福。
  • 曾經發生過的事情不會忘記,只是想不起來而已。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,210評論 30 471
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,518評論 0 3
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 閱讀是一件很自我的事情,讀到一本好書的愉悅感是從外到內的。 我在讀《瓦爾登湖》的時候,又遇到了那種需要一字一句讀下...
    追余莫待閱讀 459評論 0 4