【问题标题】:Creating a copy of an ArrayList of HashMaps创建 HashMap 的 ArrayList 的副本
【发布时间】:2017-04-11 15:49:02
【问题描述】:

我有一些代码可以创建 HashMaps 的 ArrayList,然后我需要 HashMaps 的 ArrayList 的副本来执行计算,但我希望原件保持不变。

我已经尝试了各种方法,来自人们的 SO 答案,这是我当前的代码:

List<Map> counts = new ArrayList<>();

counts 列表中填充了 HashMap。

我需要一份副本,但我不希望我在副本上执行的计算影响原件。

我试过了:

List<Map> copyCounts = new ArrayList<Map>(counts);

但是每当我执行更改时,它都会改变原始内容

【问题讨论】:

  • 永远不要使用克隆。它坏了。
  • 不认为你可以克隆地图吗?
  • 可以使用java-8流进行计算,不会改变原列表的状态

标签: java arraylist


【解决方案1】:

这里是如何创建一个深拷贝:

List<Map> counts = ...

List<Map> copy = new ArrayList<>();
for(Map m : counts){
  copy.add(new HashMap(m));
}

【讨论】:

  • 为了将来参考,使用泛型!
  • 你将如何为这个@JacobG 使用泛型。
  • @user3667111 如果不知道Map 的键/值类型,我无法举个例子。
  • 双打 @JacobG.
  • @user3667111 然后将Map替换为Map&lt;Double, Double&gt;
【解决方案2】:

这是因为您添加到新数组列表中的所有地图仍然是通过引用。您还需要复制各个地图。

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2020-11-07
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多