如何在java中创建重复的地图对象?

时间:2014-06-22 17:42:35

标签: java

我有一个类型为TreeMap<String, ArrayList<SomeObject>>的树形图对象tm2。我想从中复制(复制)。我尝试克隆:TreeMap tm = (TreeMap) tm2.clone()但没有帮助。请建议我如何完全获取副本(以便复制的Object不会引用原始对象成员)

1 个答案:

答案 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;
}

这是您实际想要在程序中的其他地方调用的方法。

(请注意,将其拆分为三个方法在技术上并不是必需的 - 每个方法都在一个地方调用,因此您可以将整个事物编写为一个大的嵌套循环 - 但它有助于提高可读性和可维护性。)