Objektbaum iterieren

MS-Tech

Erfahrenes Mitglied
Hallo,

ich habe eine Frage und ich hoffe, daß mir jemand helfen kann.

Ich versuch mal mein Problem zu beschreiben.

Ich habe eine Klasse A und diese Klasse hat eine ArrayList z.B. listObjects, in welche wiederrum A-Klassen kommen, also eben eine rekursive Liste. Ich habe noch andere Objekte, wie z.B. Klasse B, Klasse C, Klasse E usw. Diese Klassen sind wiederrum von Klasse A abgeleitet. Ich steck nun in diese ArrayList listObjects die Klassen B, C und E rein, wie ich grad lustig bin.

Soweit so gut. Diese Klasse E hat wiederrum zwei ArrayList´s z.B. listZub und listSub. Diese sind gefüllt, wenn die Klasse E das letzte Objekt im Baum ist. Ich kann natürlich in die listObjects von Klasse E wiederrum viele Klassen E reinstecken.

So sieht ungefähr so ein Baum aus:

A
|
|-----B
......|
......|-----C
............|------E (diese Klasse hält nun Objekte in den Listen listZub und listSub)
............|------E (diese Klasse hält nun Objekte in den Listen listZub und listSub)
............|------E (diese Klase hält keine Objekt in den Listen listZub und listSub)
...................|
...................|------E (diese Klasse hält nun Objekte in den Listen listZub und listSub)
.
.
.
.
.

usw...

Ich will nun immer an diese Objekt in den Listen listZub und listSub kommen. Wie schaff ich das? Wie kann ich durch so einen dynamisch erzeugbaren Baum interieren und an diese Objekte in den Listen kommen?

Hat jemand nen Vorschlag bzw. eine Lösung?

Ich hoff ich hab mein Problem gut genug beschrieben?

Viele Grüße

Sascha
 
Zuletzt bearbeitet:
Wenn ich dich jetzt richtig verstanden habe könntest du es eventuell so machen:
Rufe eine Methode der Klasse E auf.
Darin rufst du eine List-Methode der Klasse, die die Listen enthählt auf, und lässt dir die Listen geben. Dann startest du eine typische for(int i = 0; i < ....size(); i++)
Und dann prüfst du, ob ....get(i) == this ist. Ist es dass, rufst du die Methode auf.

Könnte das so gehen?
 
Ich glaube das nennt man Komposition. Mit einer rekursiven Methode müßtest Du erreichen, was Du willst:

Code:
public void findObjects(A a) {
   List<?> list = new ArrayList();
   findObjects(a, list);
}
 
private void findObjects(A a, List<?> list) {
   if (a instanceof E) {
     E e = (E)a;
     list.addAll(e.getZubList());
     list.addAll(e.getSubList());
   } else {
     for (A a1 : a.getList()) {
        findObjects(a1, list); // Rekursion
     }
   }
}
 
Zurück