1

キーが文字列で、値が別のクラスのオブジェクトである Map を含むクラスがあります。

          Class Employee {
               String name;
          }

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

2 つの Company オブジェクト obj1 と obj2 があり、あるオブジェクトから別のオブジェクトにマップをコピーしたいと考えています。

以下のいずれかを行うと、

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

ここで、obj1 のマップを操作して、obj2 が持つ同じ Company オブジェクトの Employee の別のオブジェクトを指す値を作成すると、obj2 のマップも影響を受けます。

キーと値を新しいマップにコピーしてオブジェクトに割り当てる以外に、マップの内容を別のオブジェクトのマップにコピーして、1 つのマップを操作しても他のマップに影響を与えないようにする方法はありますか。どんな提案でも大歓迎です。

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

以前、ディープ コピーとシャロー コピーに関するこの記事を読み、ブックマークしました。ディープ コピー (クローンおよびシリアライゼーション バリアント) とシャロー コピーのメカニズムを理解するのに役立ちます。各コピー メカニズムに関する制限と問題。

于 2012-10-30T17:27:02.553 に答える
0

試す:

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