如何克隆ArrayList并在Java中克隆其项目?
例如,我有:
ArrayList<Dog> dogs = getDogs();
ArrayList<Dog> clonedList = ....something to do with dogs....
Run Code Online (Sandbox Code Playgroud)
我希望那些物品clonedList与狗列表中的物品不同.
我有一些数据存储为ArrayList.当我想备份这些数据时,java会永远绑定两个对象.这意味着当我更改数据中的值时,ArrayList此更改将进入备份.我试图将数据中的值分别复制到循环中的备份,尝试使用方法data.clone()- 没有任何帮助.
首先让我说我不能在这里放任何代码,因为我的笔记本电脑上的互联网不能工作,所以我通过手机发布这个.好吧问题是我说有两个类:第一和第二类.第一类有一个ArrayList属性,它从类2中调用void方法并将其ArrayList作为参数传递.现在该方法初始化另一个方法ArrayList并使其等于我传递的参数并对该新方法进行更改ArrayList.有趣的是,即使我作为参数传递的原始ArrayList也在改变.可能的原因是什么?
我有一个包含自定义对象的List.我想创建该List的深层副本.这是自定义对象的类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有以下情况:
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());
Run Code Online (Sandbox Code Playgroud)
但是,如果我对parentListie中delete的项目或add新项目进行任何更改.copyList也受影响.如何确保copyList不引用相同的内存地址.
更新:
如建议使用clone().但问题是我的自定义对象中有一个列表.他怎么样 …