使用pass-by-value创建Map副本的最佳方法是什么?

时间:2012-09-11 04:32:22

标签: java map copy

如果我有一个包含100个值的Java地图,我想使用此代码创建另一个副本:

LinkedHashMap<String, Vector<String>> map1 = new LinkedHashMap<String, Vector<String>>();
LinkedHashMap<String, Vector<String>> map2 = new LinkedHashMap<String, Vector<String>>( map1 );

然后,如果我在map1的任何Vector条目中更改任何值,它也会在map2中受到影响。我不要那个。我希望map2在map1上完全独立。

最好的方法是什么?

1 个答案:

答案 0 :(得分:9)

基本上,你需要克隆每个载体:

LinkedHashMap<String, Vector<String>> map2 = new LinkedHashMap<String, Vector<String>>();
for (Map.Entry<String, Vector<String>> entry : map1.entrySet()) {
    Vector<String> clone = new Vector<String>(entry.getValue());
    map2.put(entry.getKey(), clone);
}

当然,你不必深入到这一点 - 因为String是不可变的。

(顺便说一下,你使用Vector而不是ArrayList的任何理由?)