次の構造があり、このようなリストを作成したとします。私がそうし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;
}