使用hashmap <string,hashmap>中的一个更新来更新多个键的值

时间:2018-03-17 07:10:52

标签: java hashmap

以下代码是散列映射的表示。

我正在尝试逐个更新此地图中2个键的值,但在第二次更新时,这些键都会更新(请参阅代码注释以了解)。我不明白我在这里做错了什么。

 public class TestClass {

    public static void main(String[] args) {
        HashMap<String, HashMap<String, String>> MainHashMap = new HashMap<String, HashMap<String, String>>();
        HashMap<String, String> hmc1 = new HashMap<String, String>();
        HashMap<String, String> hmc2 = new HashMap<String, String>();
        HashMap<String, String> hmc3 = new HashMap<String, String>();
        HashMap<String, String> updateHM = new HashMap<String, String>(); 
        hmc1.put("1", "AC");
        hmc1.put("2", "TV");
        hmc2.put("1", "Fan");
        hmc2.put("2", "Light");
        hmc3.put("1", "Iron");
        hmc3.put("2", "Geyser");
        MainHashMap.put("1", hmc1);
        MainHashMap.put("2", hmc2);
        MainHashMap.put("3", hmc3);
        System.out.println(MainHashMap); // printing the mian hasp map with three hash maps
        updateHM.put("1", "Bag");// creating a temp hash map
        updateHM.put("2", "pen");
        MainHashMap.put("1", updateHM); // updating the key 1 of the main hash map
        updateHM.put("1", "jeet");// changing the temp hash map
        updateHM.put("2", "vishu");
        MainHashMap.put("2", updateHM);// updating the key 2 of the main hash map
        System.out.println(MainHashMap);// we see that both the keys are updated
    }

}

输出:

{1={1=AC, 2=TV}, 2={1=Fan, 2=Light}, 3={1=Iron, 2=Geyser}}
{1={1=jeet, 2=vishu}, 2={1=jeet, 2=vishu}, 3={1=Iron, 2=Geyser}}

请求帮助。

由于

2 个答案:

答案 0 :(得分:1)

您正在更新updateHM地图对象,该对象已存储在mainMap中,而不是1,其值为{1=Bag, 2=pen}。以下代码行更新了updateHM

        updateHM.put("1", "jeet");// changing the temp hashmap
        updateHM.put("2", "vishu");

HashMap对象是可变的。因此,对HashMap对象的任何操作都可能影响它的使用位置。所以,如果你想解决你的问题,那么每次你想要更新时都要创建一个HashMap的新对象。在更新mainMap中的键2之前使用下面的代码

updateHM = new HashMap<>();
updateHM.put("1", "jeet");// changing the temp hash map
updateHM.put("2", "vishu");
MainHashMap.put("2", updateHM);

答案 1 :(得分:0)

更新前需要新的HashMap实例:

updateHM = new HashMap<String, String>(); 
updateHM.put("1", "jeet");
updateHM.put("2", "vishu");
MainHashMap.put("2", updateHM);