【发布时间】:2019-10-02 01:48:52
【问题描述】:
我有一个包含许多 Team 对象的 ArrayList。我需要创建此数组列表的深层克隆,但每个 Team 对象都有一个包含更多 Team 对象的 ArrayList。当母 ArrayList 的大小达到数百个时,我得到一个 StackOverflow 错误。
我编写了一个实用函数,通过在每个元素上调用 Team::clone() 来深度克隆数组列表。 Team::clone() 被覆盖以返回 Team 对象的深层副本。 Team::clone() 包括对实用程序 deepclone 函数的调用以克隆其自己的数组列表
如果你需要代码
class Team {
int foo;
ArrayList<Team> teams;
public Team(int foo, ArrayList<Team> bar){
teams=bar;
foo=foo;
}
@Override
public Team clone(){
new Team(foo,deepclone(teams));
}
public static ArrayList<Team> deepclone(ArrayList<Team> in){
ArrayList<Team> ret=new ArrayList<>();
for(Team t:in) {
ret.add(t.clone());
}
return ret;
}
public static void main (String args[]){
//already have a huge ArrayList of teams
deepclone(thebigarraylist);
}
}
【问题讨论】:
-
确认一下,列表的嵌套有多深? (有多少嵌套级别的列表?)
-
母数组内部通常只有一层,但在特殊情况下,层数可能会无限增加
-
可以使用栈结构来模拟递归。