I have a class like this:
class Foo {
public String name = "";
public ArrayList<Foo> children = new ArrayList<Foo>();
}
Now, I have about two thousand of these 'Foo' objects stored in ArrayList, and they are related to each other as you can see from the snippet above. Now, these relations may be cyclic: A may have a child B, which may have child C, which may have child A. What I want to do is to print out a tree of these relations while ignoring the cyclic relations, like this:
ObjA
ObjB
ObjC
ObjD
ObjB
ObjA
How can I do this? It doesn't have to be fast or anything, this tree would be mainly for ensuring the results of my program.
Foo
needs a print
method that prints its contents and then calls the print
method of the Foo
it's pointing to. Print
takes a HashSet that contains all Foo
objects that have been traversed. If next
is in visited
then it's part of a cycle and you don't call its print
method.
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);
}
}
}
You may also want to pass in an int
parameter that determines the level of indentation - if indent
equals 4 then print 4 spaces before the System.out.println
, and increment indent
by 2 or 4 or whatever when you call print
on next
.