最初,我将两个具有相同值的条目放入一个hashmap中。两个条目的值本身就是一个映射。这些条目具有不同的键。
现在我想将新值放入第一个条目的地图(值)中。问题是,只要我更改第一个条目,第二个条目的映射(其值)也会更改。两个不同的键以某种方式引用相同的值(map)。
我应该怎样做才能相互分别编辑最初相同值的值?
答案 0 :(得分:5)
基本上,问题是您没有将两个地图放入地图中,而是将两个引用添加到相同的地图中。
要在外部地图中拥有两个独立版本的内部地图,您需要先将其复制,然后再将其放入。
您应该能够使用HashMap
方法制作clone
的副本。请注意,虽然这确实可以获得两个不同的地图,但两个地图中的实际值是相同的。这意味着如果复制的地图内容是可变的并且您更改它们,它们仍将在两个地方都发生变化。
澄清:
HashMap<Object, Object> map1 = new HashMap<Object, Object>()// This is your original map.
map1.put("key", mutableObject)
HashMap<Object, Object> map2 = map1.clone();
map2.put("something", "something else");// map1 is unchanged
map2.get("key").change();// the mutable object is changed in both maps.
答案 1 :(得分:1)
在不同的键下放置相同的引用很好。但是为了解决我不会使用clone
方法而是使用显式复制:
包com.au.psiu;
import java.util.HashMap;
import java.util.Map;
public class NoIdea {
public static void main(String... args) {
Map source = new HashMap();
//Insert value into source
Map copy1 = new HashMap();
copy1.putAll(source);
Map copy2 = new HashMap();
copy2.putAll(source);
Map mapOfMaps = new HashMap();
mapOfMaps.put("key1", copy1);
mapOfMaps.put("key2", copy2);
//...and you can update maps separately
}
}
另外,您可能需要了解google guava项目 - 它们有很多有用的API集合。