假设我有以下结构,并且我创建了一个像这样的列表。 如果我做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;
}
'新的ArrayList(top.mids)'是复制的'top.mids'一切到一个新的'ArrayList'。从这个列表中删除并不意味着从'top.mids'中删除。如果您要修改列表中的元素,那些更改将反映在'top.mids'中,因为它们引用了相同的对象。 –