创建多级列表的深层副本?

时间:2019-11-02 21:10:05

标签: java deep-copy

我有:

ArrayList<ArrayList<ArrayList<Task>>> optimalPaths = new ArrayList<ArrayList<ArrayList<Task>>>();

我想创建一个OptimalPaths的深层副本。副本本身不应包含对optimumPaths的任何引用。以下代码可以工作吗?

ArrayList<ArrayList<ArrayList<Task>>> altPaths = new ArrayList<ArrayList<ArrayList<Task>>>();

for (ArrayList<ArrayList<Task>> e : optimalPaths){
    altPaths.add((ArrayList<ArrayList<Task>>) e.clone()); // Create deep copy of optimalPaths
}

我不确定altPaths中是否仍存在某些级别的引用。

2 个答案:

答案 0 :(得分:0)

您可以自己做

None

答案 1 :(得分:0)

如果Task类没有要复制的临时字段,则可以使用序列化和反序列化复制:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(optimalPaths);

ByteArrayInputStream bis = new   ByteArrayInputStream(bos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bis);
ArrayList<ArrayList<ArrayList<Task>>> copied = (ArrayList<ArrayList<ArrayList<Task>>>) in.readObject();

或使用外部类来做到这一点:SerializationUtils from Apache Commons

相关问题