如何在java中创建深层副本

时间:2017-10-14 10:40:48

标签: java deep-copy

我的问题是如何在java中制作深层副本。 现在这是我的代码,但我不认为这是正确的。

@Override
public ListInterface<E> copy() {
    ListerInterface<E> temp = new List<E>();

    if (isEmpty()) {
        return null;
    } else {
        goToFirst();

        do {
            temp.inset(retrieve());
        } while (currentNode.next != null);

        currentNode = currentNode.next;
    }

    return temp;
}

那么有人知道我应该在我的代码中更改什么来获得正确的深层副本吗?

1 个答案:

答案 0 :(得分:0)

下面的代码复制一个列表,该列表可能包含其他列表作为引用对象:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(final String[] args) {
        final ArrayList list = new ArrayList();
        list.add(Arrays.asList("A", "B", "C"));
        list.add("D");
        System.out.println(list);
        final ArrayList out = new ArrayList();
        deepCopy(out, list);
        System.out.println(out);
    }

    public static void deepCopy(final List out,
                                final List in) {
        for (Object o: in)
            if (o instanceof List) {
                final ArrayList copy = new ArrayList();
                deepCopy(copy, (List)o);
                out.add(copy);
            }
            else
                out.add(o);
    }
}

编辑:
如果要克隆引用的对象,则必须能够访问引用对象的clone方法。