1. 程式人生 > >存放在HashMap內的資料更新驗證

存放在HashMap內的資料更新驗證


        String str = testMap.get(0);
        str = "222";
        Log.e("ttttttest","testMap.get(0)-第四次->  "+testMap.get(0));

在HashMap的外部,更改存放在HashMap裡的物件的屬性值,這個時候HashMap裡的物件對應的值會改變嗎?如果存放在Map的Value的型別是String類呢? 這裡來驗證一下,首先定義一個Value值為String的Map testMap,一個Value值為Person的的Map testPersonMap;
 然後編寫Person類,person 有一個name屬性。
private Map<Integer, String> testMap = new HashMap<Integer, String>();
private HashMap testPersonMap = new HashMap<Integer, Persion>();
    public class Persion {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

定義兩個String變數string1和string2 放入testMap,這個時候,打印出來,是我們放入時的值沒有錯。
        String string1 = "abc";
        String string2 = "xyz";
        testMap.put(0,String1);
        testMap.put(1,string2);

        Log.e("ttttttest","testMap.get(0)-->  "+testMap.get(0));
        Log.e("ttttttest","testMap.get(1)-->  "+testMap.get(1));
這個時候更改string1的值,列印map裡的string1,
        String1 = "111";
        Log.e("ttttttest","testMap.get(0)-第二次->  "+testMap.get(0));
將更改後的string1放入map 列印
        testMap.put(0,String1);
        Log.e("ttttttest","testMap.get(0)-第三次->  "+testMap.get(0));
取出對應位置的string 更改後列印: String str = testMap.get(0);
str = "222"; Log.e("ttttttest","testMap.get(0)-第四次-> "+testMap.get(0));將String換成Person類來驗證
        Persion persion1 = new Persion();
        persion1.setName("zhangsan");
        Persion persion2 = new Persion();
        persion2.setName("lisi");
        testPersonMap.put(0,persion1);
        testPersonMap.put(1,persion2);
        Log.e("ttttttest","testPersonMap.get(0)-->  "+((Persion)testPersonMap.get(0)).getName());
        Log.e("ttttttest","testPersonMap.get(1)-->  "+((Persion)testPersonMap.get(1)).getName());
        persion1.setName("wangwu");
        Log.e("ttttttest","testPersonMap.get(0)-第二次->  "+((Persion)testPersonMap.get(0)).getName());
        testPersonMap.put(0,persion1);
        Log.e("ttttttest","testPersonMap.get(0)-第三次->  "+((Persion)testPersonMap.get(0)).getName());

        Persion persion = (Persion)testPersonMap.get(0);
        persion.setName("zhaoliu");

Log.e("ttttttest","testPersonMap.get(0)-第四次-> "+((Persion)testPersonMap.get(0)).getName());


可以看出,對於普通的類來說,Map中存放的只是物件的引用,我們不管是在Map外更改物件的屬性,還是將物件從Map中取出來更改物件,map中存放的物件都會改變。 String str = testMap.get(0); str = "222"; Log.e("ttttttest","testMap.get(0)-第四次-> "+testMap.get(0));