我有一个类型为TreeMap<String, ArrayList<SomeObject>>
的树形图对象tm2。我想从中复制(复制)。我尝试克隆:TreeMap tm = (TreeMap) tm2.clone()
但没有帮助。请建议我如何完全获取副本(以便复制的Object不会引用原始对象成员)
答案 0 :(得分:2)
您可以在“图层”中执行此操作。首先,创建一个copySomeObject
方法,该方法接受SomeObject
实例并返回它的副本。既然你没有提供有关该课程的任何信息,我无法向你展示它的样子,但是 - 像这样:
private SomeObject copySomeObject(final SomeObject someObject) {
final SomeObject ret = new SomeObject();
ret.setFoo(someObject.foo());
ret.setBar(someObject.bar());
return ret;
}
然后,您可以使用上面的copySomeObject
方法创建一个copyList
方法,该方法接受ArrayList<SomeObject>
个实例并返回它的副本:
private ArrayList<SomeObject> copyList(final ArrayList<SomeObject> list) {
final ArrayList<SomeObject> ret = new ArrayList<SomeObject>();
for (final SomeObject someObject : list) {
ret.add(copySomeObject(someObject));
}
return ret;
}
最后,您可以使用上面的copyList
方法创建一个copyMap
方法,该方法接受TreeMap<String, ArrayList<SomeObject>>
个实例并返回它的副本:
private TreeMap<String, ArrayList<SomeObject>> copyMap
(final TreeMap<String, ArrayList<SomeObject>> map) {
final TreeList<String, ArrayList<SomeObject>> ret =
new TreeList<String, ArrayList<SomeObject>>();
for (final Map.Entry<String, ArrayList<SomeObject>> entry : map.entrySet()) {
ret.put(entry.getKey(), copyList(entry.getValue());
}
return ret;
}
这是您实际想要在程序中的其他地方调用的方法。
(请注意,将其拆分为三个方法在技术上并不是必需的 - 每个方法都在一个地方调用,因此您可以将整个事物编写为一个大的嵌套循环 - 但它有助于提高可读性和可维护性。)