如何在java中创建深层副本
我的问题是如何在java中创建深层副本。 现在这是我的代码,但我不认为这是正确的。如何在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;
}
那么,有没有人知道我应该改变我的代码来得到一个正确的深拷贝?
下面复制的代码可能包含其他列表为引用的对象列表:
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方法被引用的对象。
谢谢,是的,我的确需要克隆整个列表。 –
你需要克隆引用的对象吗?如果是,那么你需要通用参考还是具体的?因为如果你去泛化,那么你必须有权访问克隆方法。 – thanopi57
我需要一个泛型引用,我只是发现我忘记了我的程序中的克隆方法 –
请添加一个[最小,完整和可验证](https://stackoverflow.com/help/mcve)示例。既然这是你的第一个问题,你可以阅读[提问问题指南](https://stackoverflow.com/help/how-to-ask)。 –
关于参考文献中的对象:您是否需要克隆它们? – thanopi57
Maybee咨询[Arrays.deepEquals(...)](https://docs.oracle.com/javase/9/docs/api/java/util/Arrays.html#deepEquals-java.lang.Object:A- java.lang.Object:A-)方法? – thanopi57