【问题标题】:Map deep copy method [duplicate]地图深拷贝方法[重复]
【发布时间】:2020-03-25 16:18:46
【问题描述】:
public Map<String, List<Integer>> deepCopy(Map<String, List<Integer>> map) {
    Map<String, List<Integer>> res = new HashMap<>();
    for (String s : map.keySet()) {
        res.put(s, map.get(s));
    }
    return res;
}

此方法是对地图进行深层复制。我相信我写的方法有一些问题,但我找不到

【问题讨论】:

  • 你为什么认为有问题?什么样的问题?
  • “我相信这个方法有一些问题”你可能是对的,但让我们从你的想法开始吧。

标签: java algorithm


【解决方案1】:
res.put(s, map.get(s));

您不会创建原始List 的副本。它仍然是同一个 Object,“复制”的对象会受到原始 Object 的突变的影响。

您也不会创建字符串的副本,即 Map 的键。您复制的地图中的字符串将具有相同的引用。

【讨论】:

    【解决方案2】:

    最简单的就是这样做:

    res.put(s, new ArrayList<>(map.get(s));
    

    这样您不会复制对列表的引用,而是创建一个新列表,因此是深层复制。

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 2017-10-14
      • 1970-01-01
      • 2016-05-07
      • 2011-03-24
      • 2013-03-12
      • 2014-11-08
      • 1970-01-01
      • 2017-03-18
      相关资源
      最近更新 更多