Listen in Listen in Listen ... ???

Darnok

Mitglied
Guten Tag,
Ich habe momentan eine Aufgabenstellung in der ich eine liste in mehrere teil Listen aufspalte und diesen vor gang für jede Teilliste wiederhole und so weiter bis eine gewisse Anforderung erfüllt ist. Nun macht es wohl keinen sin List<List<List<List<List<>>>>> oder sowas zu machen um dies speichern zu können was bietet sich sonst besser an?

In meiner Aufgabenstellung ist an unterschiedlichen stellen die rede von "Ordnern" und "Baumen" ich denke das ein Ordner im sinne einer klasse eventuell sinn macht doch wie setze ich sowas korrekt um?


Java:
public class Folder {
    List<Folder> folderList = new ArrayList<>();
    List<Tag> tagList = new ArrayList<>();
}

würde das sinn machen wobei ich mich dann wieder frage wie ich das richtig setze aber das werde ich dann sehen sollte eigentlich gehen.

Vielen Dank
 
Irgendwie verstehe ich nicht , was Du genau haben willst.

Also erst einmal: Wenn Du eine List hast und diese aufteilst, dann hast Du 2 Listen. Wenn Du diese wieder aufteilst, dann hast Du 4 Listen.... Das wäre aber prinzipiell alles in einer einzigen List<List> speicherbar. Du musst also nicht tiefer hinein gehen. Und wenn Du das dann so lange Treibst, bis jede Liste nur noch ein Element hat, dann hast Du am Ende tatsächlich sogar nur eine List!

Nun kann. man sich überlegen: Muss man überhaupt irgendwas aufteilen? Du hast ja n-Elemente mit einem Index von [0 ... n-1] und da Du auf jedes Element mit dem Index zugreifen kannst, kannst Du auf das Aufteilen verzichten und direkt über die Indices gehen. Du berechnet also einfach, welche Elemente Du jeweils haben willst ohne an der Speicherform etwas zu verändern. Das muss man sich aber dann auf einem Blatt Papier im Detail überlegen, was das dann bedeutet. Sprich: An der Speicherform müsst Ihr für diese Aufgabenstellung erst einmal nichts machen! Aber natürlich: Wenn weitere Operationen geplant sind, dann kann es notwendig sein, dass man die Datenstruktur tatsächlich anpasst.

Aber egal, wie du es lösen willst: Du solltest immer mit Klassen sowas Kapseln. Und dann hast Du von mir aus eine Klasse Daten, welche intern eine List<Irgendwas> hat. Zugriffe kannst Du dann mit Methoden machen, aber die gewünschte Schnittstelle muss definiert sein: Sprich: Was genau willst Du damit machen?

Wenn Du meinst, das in der Klasse eine Aufteilung Sinn macht / sein muss (weil gewisse Operationen auf den Daten sonst unübersichtlich sind oder einfach nicht performant funktionieren), dann kannst Du das natürlich aufteilen in zwei Bereiche. Aber das sind dann wieder Instanzen von der Klasse Daten. Du hast also dann statt List<Irgendwas> zwei Variablen vom Typ Daten, die wir z.B. left und right nennen könnten. Und du erkennst es evtl. schon: Das ist tatsächlich ein Baum. Und wenn Du die Daten gekapselt hast, dann ist die Änderung einfach, denn Du kannst dann einfach die Methoden der Klasse anpassen ohne Sorgen zu haben, dass irgend welcher Code nicht mehr funktioniert.
 
Es ist bestimmt so etwas gemeint:
Java:
public class Tree<T> {
    private Node<T> root;

    public Tree(T rootData) {
        root = new Node<T>();
        root.data = rootData;
        root.children = new ArrayList<Node<T>>();
    }

    public static class Node<T> {
        private T data;
        private Node<T> parent;
        private List<Node<T>> children;
    }
}
 

Zurück
Oben