2016-04-03 132 views
-1

我有两个HashMap。如何将HashMap添加到HashMap的HashMap中而不​​被覆盖

Map<Integer, HashMap<String,Integer>> outer = new HashMap<Integer,HashMap<String,Integer>>(); 
    HashMap<String, Integer> inner =new HashMap<String, Integer>(); 

我有一个循环,使用全局变量(公共静态HashMap中tempMap = NULL;)更新内随着每次迭代

inner.put(word, docEnum.freq()); 

每次迭代我内添加到外后

 tempMap = inner; 
     outer.put(count, tempMap); 
     count++; 

当我打印外部时,我发现每个元素都包含inner的最终版本。 如何防止这些数据被覆盖。我已经通过将内部传入一个全局变量的方式就这个主题提出了一些其他问题的建议,但似乎并不奏效。

谢谢

+0

你意识到你只是在你的HashMap中存储**引用**,对吗?如果你想让每个都不同,你需要明确地复制。 –

+0

不要让'tempMap = new Hashmap'可能是正确的解决方案,但如果没有显示[mcve],很难知道你在做什么以及为什么它不起作用 –

回答

0

一般的java概念是通过引用来调用。 如果您不想覆盖信息,则必须每次都复制内部地图或创建一个新地图。

0

您可以在每次迭代中克隆内部。但它会消耗更多的内存。

tempMap = inner; 
outer.put(count, tempMap.clone()); 
count++; 

这是因为tempMap通过引用保存在HashMap中,而不是作为单独的对象保存。