【发布时间】:2018-07-12 12:42:21
【问题描述】:
我有一个包含自定义对象的列表。我想创建该列表的深层副本。 这是自定义对象的类:
public class MyMemo {
private List<Uri> imageUriList;
private String commentText;
public MyMemo(){
imageUriList = new ArrayList<>();
}
public List<Uri> getImageUriList() {
return imageUriList;
}
public void setImageUriList(List<Uri> imageUriList) {
this.imageUriList = imageUriList;
}
public String getCommentText() {
return commentText;
}
public void setCommentText(String commentText) {
this.commentText = commentText;
}
}
现在我有以下情况:
List<MyMemo> parentList = new ArrayList<>();
List<MyMemo> copyList = new ArrayList<>(parentList);
parentList.get(currentMemoPosition).getImageUriList().removeAll(someOtherList.getImageUriList());
Log.e(TAG,"Total List: "+parentList.get(currentMemoPosition).getImageUriList().size()+" "+copyList.get(currentMemoPosition).getImageUriList().size());
但是,如果我对 parentList 进行任何更改,即 delete 中的一个项目或 add 新项目。 copyList 也会生效。如何确保 copyList 没有引用相同的内存地址。
更新:
建议使用clone()。但问题是我的自定义对象中有一个列表。我怎样才能clone()他们?
【问题讨论】:
-
创建一个
clone方法,它将source 的每个元素复制到应作为返回值的destination 中。有点像 Prototype 设计模式。 -
你能举一个例子
main()方法来说明你遇到的问题吗? -
@Code-Apprentice 更新了我的代码。我使用
removeAll()来更改parentList的自定义对象的内部列表。但这也会影响copyList的大小。 -
@Ravi 我在每个自定义对象中都有一个列表。如何克隆它们?