我有一个这样的课程:
class Foo {
public String name = "";
public ArrayList<Foo> children = new ArrayList<Foo>();
}
现在,我有大约两千个'Foo'对象存储在ArrayList中,它们彼此相关,正如您从上面的代码片段中看到的那样。现在,这些关系可能是循环的:A可能有一个孩子B,可能有孩子C,可能有孩子A.我想要做的是打印出这些关系的树而忽略循环关系,如下所示:
ObjA
ObjB
ObjC
ObjD
ObjB
ObjA
我该怎么做?它不必是快速的或任何东西,这棵树主要用于确保我的程序的结果。
答案 0 :(得分:1)
Foo
需要一个print
方法打印其内容,然后调用它所指向的print
Foo
方法。 Print
获取包含已遍历的所有Foo
个对象的HashSet。如果next
位于visited
,那么它就是一个周期的一部分而您不会调用其print
方法。
class Foo {
Foo next;
void print(HashSet<Foo> visited) {
System.out.println("this Foo's ID or whatever it is you're printing");
visited.add(this);
if(next != null && !visited.contains(next)) {
next.print(visited);
}
}
}
您可能还想传递一个确定缩进级别的int
参数 - 如果indent
等于4,则在System.out.println
之前打印4个空格,并增加indent
当您在print
上致电next
时,请按2或4或其他任何内容。