【发布时间】:2013-08-28 21:34:12
【问题描述】:
假设我有以下结构并创建了一个这样的列表。
如果我这样做 temp.remove(0) 它不会影响原始列表,但 temp.get(0).vars.remove(0) 也会从原始列表中删除元素。
我认为new ArrayList(top.mids) 没有做深拷贝,那么temp.remove(0) 怎么不影响原始列表?
//Top class init part and adding elements are omitted
List<Mid> temp = new ArrayList(top.mids);
temp.remove(0);
temp.get(0).bots.remove(0);
public class Top{
List<Mid> mids = new ArrayList<Mid>();
}
public class Mid{
List<Bot> bots = new ArrayList<Bot>();
}
public class Bot{
int id;
}
【问题讨论】:
-
new ArrayList(top.mids)正在将top.mids中的所有内容复制到新的ArrayList。从此列表中删除并不意味着从top.mids中删除。如果您要修改列表中的元素,这些更改将反映在top.mids中,因为它们引用了相同的对象。
标签: java list deep-copy shallow-copy