我正在尝试构建HashMaps的巨型HashMap。我遇到了可变性问题,我不断修改已经添加到地图中的元素。我结束了使用这种方法,虽然它确实应该想知道可能有更好的方法来做到这一点
public class Main {
public static void main(String[] args) {
HashMap<String, HashMap<String, String>> map = new HashMap<String, HashMap<String, String>>();
HashMap<String, String> s = null;
// process 1
s = new HashMap<>();
s.put("foo", "bar");
s.put("foo1", "bar");
s.put("foo2", "bar");
s.put("foo3", "bar");
map.put("m1", (HashMap<String, String>) s.clone());
// process 2
s = new HashMap<>();
s.put("9", "bar");
s.put("10", "bar");
s.put("11", "bar");
s.put("12", "bar");
map.put("m2", (HashMap<String, String>) s.clone());
// process 3
s = new HashMap<>();
s.put("99", "bar");
s.put("103", "bar");
s.put("112", "bar");
s.put("121", "bar");
map.put("m3", (HashMap<String, String>) s.clone());
for (Map.Entry<String, HashMap<String, String>> entry : map.entrySet()) {
String key = entry.getKey();
HashMap<String, String> value = entry.getValue();
System.out.print("");
// ...
}
}
}
答案 0 :(得分:1)
由于您为每个内部引用创建了新的HashMap
,因此无需clone
它。你在这里做的只是将一个新对象放到引用中:
s = new HashMap<>();
因此,简而言之,您创建此方式的每个HashMap
将是一个不同的对象,s
变量包含对您正在使用的当前变量的引用。