我有两个HashMaps。
Map<Integer, HashMap<String,Integer>> outer = new HashMap<Integer,HashMap<String,Integer>>();
HashMap<String, Integer> inner =new HashMap<String, Integer>();
我有一个循环,每次迭代都在内部更新
inner.put(word, docEnum.freq());
每次迭代后,我使用全局变量将内部添加到外部(public static HashMap tempMap = null;)
tempMap = inner;
outer.put(count, tempMap);
count++;
当我打印外部时,我发现每个元素都包含内部的最终版本。 如何防止此数据被覆盖。我已经通过将内部传递给全局变量来接受关于该主题的一些其他问题的建议,但它似乎不起作用。
谢谢
答案 0 :(得分:0)
一般的java概念是通过引用调用。 如果您不想覆盖信息,则必须每次复制内部地图或创建新地图。
答案 1 :(得分:0)
您可以在每次迭代时克隆内部。但它会消耗更多的内存。
tempMap = inner;
outer.put(count, tempMap.clone());
count++;
这是因为tempMap通过引用保存在HashMap中,而不是作为单独的对象保存。