Предположим, у меня есть следующая структура, и я создал список, подобный этому. Если я сделаю 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', потому что они ссылаются на одни и те же объекты. –