【发布时间】:2013-11-21 09:18:56
【问题描述】:
注意:我查看了不同的地方,包括 stackoverflow,但没有找到解决方案。
问题:
class Animal{
AnimalGroup animalGroup;
}
class AnimalGroup{
List<Animal> animalList;
}
class MainProgram{
// Map<groupRank, animalGroup>
Map<Integer, AnimalGroup> rankedAnimalGroups;
}
注意:很明显,一只动物只能属于一个动物组。
我想深度复制地图rankedAnimalGroups。
案例 1:克隆
我将使我的 Animal 和 AnimalGroup 可克隆。
AnimalGroup 中的克隆方法
protected Object clone() throws CloneNotSupportedException {
AnimalGroup clonedAnimalGroup = (AnimalGroup)super.clone();
for(Animal animal: animalList)
clonedAnimalGroup.addAnimal(animal.clone);
return clonedAnimalGroup;
}
Animal 中的克隆方法
protected Object clone() throws CloneNotSupportedException {
Animal clonedAnimal = (Animal)super.clone();
clonedAnimal.animalGroup = animalGroup.clone();
}
这将在 AnimalGroup 调用 Animal 和反向循环中结束。
案例2:copyConstructor
HashMap 不支持深拷贝构造函数
建议的解决方案
我可以使用Animal的构造函数,在AnimalGroup的clone方法中,如下
AnimalGroup 中的克隆方法
protected Object clone() throws CloneNotSupportedException {
AnimalGroup clonedAnimalGroup = (AnimalGroup)super.clone();
for(Animal animal: animalList)
clonedAnimalGroup.addAnimal(new Animal(animal, this));
return clonedAnimalGroup;
}
Animal 中的构造函数
public Animal(Animal other, AnimalGroup animalGroup)
{
this.animalGroup = animalGroup;
...
}
问题 在这种情况下,有没有更好的深拷贝解决方案。
编辑1
对于序列化相关方法而言,数据量太大。
编辑2
我不能在我的项目中包含用于复制的外部库等
【问题讨论】:
-
上述问题的问题不是如何复制hashmap。这是关于如何解决两个类在其克隆方法中相互递归调用的问题
标签: java performance