java-在HashMap中存储HashMap

我试图将HashMap存储在另一个HashMap中,但是第一次插入的值更改为第二次插入的值.

这是我的代码.

   HashMap<String ,HashMap<Integer ,Integer>> map1=new HashMap<>();
   HashMap<Integer ,Integer> map2=new HashMap<>(); 
   map2.put(1,1);
   map2.put(2,1);
   map2.put(3,1); 
   map1.put("1", map2); 
   System.out.println("After Inserting first value   "+map1.entrySet());
   /* OutPut:  After Inserting first value  [1={1=1, 2=1, 3=1}]*/

   map2.clear(); //i cleared map 2 values

   map2.put(4,2); 
   map2.put(5,2); 
   map2.put(6,2); 
   map1.put("2", map2); 
   System.out.println("After Inserting second value   "+map1.entrySet()); 
   /*output :  After Inserting second value    [2={4=2, 5=2, 6=2}, 1={4=2, 5=2, 6=2}]*/

第一次输出为1 = {1 = 1,2 = 1,3 = 1}]
插入第二个“键,值” [2 = {4 = 2,5 = 2,6 = 2},1 = {4 = 2,5 = 2,6 = 2}]后,我将键“ 1”的值更改为键“ 2”.

最佳答案
您需要在第二次put()调用之前创建HashMap的新实例.

// map2.clear();
map2 = new HashMap<Integer, Integer>();

Map#clear()没有为您提供新的Map实例.因此,两个map1键1和2最终都重用了map2的相同实例,因此您会看到所有值都重复.

尝试在Map#clear()之后打印地图容器,并在添加新值后再次打印

map2.clear(); //i cleared map 2 values
System.out.println("After clearing   "+map1.entrySet()); 

map2.put(4,2); 
map2.put(5,2); 
map2.put(6,2); 
System.out.println("After adding new values   "+map1.entrySet()); 

您可以清楚地看到它也影响键1.

输出:

After Inserting first value   [1={1=1, 2=1, 3=1}]
After clearing   [1={}]
After adding new values   [1={4=2, 5=2, 6=2}]
After Inserting second value   [2={4=2, 5=2, 6=2}, 1={4=2, 5=2, 6=2}]

转载注明原文:java-在HashMap中存储HashMap - 代码日志