【问题标题】:Java copy two hash mapJava复制两个哈希图
【发布时间】:2012-10-31 01:27:02
【问题描述】:

我有一个包含 Map 的类,它的键是字符串,值是另一个类的对象。

          Class Employee {
               String name;
          }

          Class Company {
              Map<String, Employee> m =new HashMap<String, Employee>();
          }

我有两个 Company 对象 obj1 和 obj2,我想将地图从一个对象复制到另一个对象。

如果我做了以下任何事情,

         obj1 = obj2  or    
         obj1.setM(obj2.getM())   // assume we have setters and getters

现在,如果我操作 obj1 的映射,使任何值指向 Employee 的不同对象,用于 obj2 具有的同一 Company 对象,其中 obj2 的映射也会受到影响。

有没有办法(除了将键和值复制到新映射并将其分配给对象),我们可以将映射内容复制到另一个对象的映射,这样操作一个映射不会影响另一个映射。任何建议都非常感谢。

【问题讨论】:

  • 查找“深度复制”,这似乎是您必须做的事情,而不是您当前正在做的“浅层”复制。
  • 是的,你需要在 hashmap 中克隆每个 Employee 对象实例

标签: java


【解决方案1】:

如果你只需要复制地图,你可以使用

new HashMap<String, Employee>(mapToCopy);

如果你需要修改员工,你需要直接复制那些对象。

【讨论】:

    【解决方案2】:

    如果我错了,请纠正我,但是当您将 Employee 分配给每个 Map 时,您是在分配 对象引用。对于Map 的每次插入,如果您想拥有一个独特的项目,您需要对对象执行某种形式的clone() 方法。

    例如,getM() 函数可能应该返回这种形式...

    public Employee getM() {
      return new Employee(name,id,....) //constructor to set identical attributes
    }
    

    【讨论】:

      【解决方案3】:

      试试:

      obj1 = HashMap<Employee, Company> obj2.clone();
      

      【讨论】:

        【解决方案4】:

        前段时间我在Deep Copy And Shallow Copy 上阅读过这篇文章并将其加入书签。它在帮助您理解深拷贝(克隆和序列化变体)和浅拷贝机制方面做得很好。每种复制机制的限制和问题。

        【讨论】:

          猜你喜欢
          • 2014-02-01
          • 2018-10-31
          • 1970-01-01
          • 2020-06-18
          • 2023-04-10
          • 1970-01-01
          • 1970-01-01
          • 2013-06-24
          • 2011-04-23
          相关资源
          最近更新 更多