1

我有一个包含 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 的映射也受到影响。

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

4

4 回答 4

2

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

new HashMap<String, Employee>(mapToCopy);

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

于 2012-10-30T17:14:28.543 回答
1

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

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

public Employee getM() {
  return new Employee(name,id,....) //constructor to set identical attributes
}
于 2012-10-30T17:12:49.200 回答
0

尝试:

obj1 = HashMap<Employee, Company> obj2.clone();
于 2012-10-30T17:13:34.550 回答
0

前段时间我读过这篇关于深拷贝和浅拷贝的文章,并为它加了书签。它在帮助您理解深拷贝(克隆和序列化变体)和浅拷贝机制方面做得很好。每种复制机制的限制和问题。

于 2012-10-30T17:27:02.553 回答