首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将HashMap存储在HashMap中

将HashMap存储在HashMap中
EN

Stack Overflow用户
提问于 2013-10-24 13:58:22
回答 5查看 8.8K关注 0票数 4

我尝试将HashMap存储在另一个HashMap中,但第一次插入值更改为第二次插入值。

这是我的密码。

代码语言:javascript
复制
   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”。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-24 14:00:56

您需要在第二个HashMap调用之前创建一个新的put()实例。

代码语言:javascript
复制
// map2.clear();
map2 = new HashMap<Integer, Integer>();

Map#clear()而不是为您提供一个新的Map实例。因此,map112最终都重用了map2的同一个实例,因此您可以看到所有的值都会自己重复。

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

代码语言:javascript
复制
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的影响。

输出

代码语言:javascript
复制
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}]
票数 5
EN

Stack Overflow用户

发布于 2013-10-24 14:01:39

将对HashMap map2的引用存储在map1中,而不是副本。这就是为什么对map2的所有后续更改都会影响插入到map1中的第一个映射。

票数 0
EN

Stack Overflow用户

发布于 2013-10-24 14:02:00

你不应该把地图弄清楚。请注意,您添加了使用以下内容创建的HashMap map2

代码语言:javascript
复制
HashMap<Integer ,Integer> map2=new HashMap<>(); 

这意味着存在使用入口内存值创建的对象。这个地址内存值被放入“更大”的HashMap中。

如果清除/更改map2,也可以在更大的HashMap中清除它,因为它只是指向相同的对象!

您必须创建新实例,所以,而不是

代码语言:javascript
复制
map2.clear();

你必须这样做:

代码语言:javascript
复制
map2=new HashMap<>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19568107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档