4

如果我有一个包含 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。

最好的方法是什么?

4

1 回答 1

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的任何原因?)

于 2012-09-11T04:35:27.933 回答