java - 创建多级列表的深层副本?
问题描述
我有:
ArrayList<ArrayList<ArrayList<Task>>> optimalPaths = new ArrayList<ArrayList<ArrayList<Task>>>();
我想创建一个最优化路径的深层副本。副本本身不应包含对最佳路径的任何引用。下面的代码会起作用吗?
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 中是否仍然存在某种程度的引用。
解决方案
如果 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();
或使用外部类来做到这一点:来自 Apache Commons 的 SerializationUtils
推荐阅读
- database - 带有外键的模型上的restfull api
- scala - SBT 本机打包程序不会将文件复制到 Docker 映像
- java - Selenium WebDriver Java keyDown not working
- java - 多线程可以在多核处理器中并行运行吗
- asp.net - 如何从 HttpRequestMessage 获取输入参数
- excel - 从excel中的日期单元格中提取字符
- python - 在 Django 项目中为可重用应用程序创建基于类的 Celery 任务
- javascript - 如何仅使用 Javascript 动态创建带有上一个和下一个按钮的图像视频缩略图滑块?
- javascript - .modal-content 用于不同的模态(react-bootstrap)
- android - Android(Firestore):无法在 Firestore 中已创建的文档中添加、更新或设置(SetOptions.merge)字段