以下代码是散列映射的表示。
我正在尝试逐个更新此地图中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}}
请求帮助。
由于
答案 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);