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

Bra*_*rad 4 java copy map

如果我有一个包含100个值的Java映射,并且我想使用以下代码创建它的另一个副本:

LinkedHashMap<String, Vector<String>> map1 = new LinkedHashMap<String, Vector<String>>();
LinkedHashMap<String, Vector<String>> map2 = new LinkedHashMap<String, Vector<String>>( map1 );
Run Code Online (Sandbox Code Playgroud)

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

最好的方法是什么?

Jon*_*eet 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);
}
Run Code Online (Sandbox Code Playgroud)

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

(顺便说一句,你使用的是什么原因Vector而不是ArrayList?)

  • 我认为你的意思是在line2中使用"map1.entrySet()"来循环访问条目. (2认同)