Lassen Sie mich mein Szenario erklären. Ich habe eine Hierarchie, die ich beibehalten muss. Unten finden Sie ein Bild, das diese Hierarchie zeigt. Ich werde nach dem Bild erklären.
%Vor%A
bis A1, A2...
ist es eine one to many Beziehung A1
bis A1.1, A1.2...
ist es eine one to many Beziehung A1.1
bis X
und A1.2
bis Y
ist es eine eins zu eins Beziehung. Ich hatte es ursprünglich so entworfen, dass es mehrere HashMap
s verwendet, um dies zu erhalten. Aber dann wurde mir schnell klar, dass das Aktualisieren zu einem extrem harten Job wird.
Mehrere HashMap
s zu haben bedeutet, dass ich die Eindeutigkeit in den verschiedenen Beziehungen selbst handhaben muss. Zum Beispiel kann A1.1
auch in einem root B
-Knoten existieren. Ich muss also A
an A1.1
anhängen, damit ich die Eindeutigkeit sicherstellen kann. Jetzt, wenn ich den Wert A
ändern muss, bin ich in größeren Schwierigkeiten, da ich dies verwendet habe, um alle Schlüssel in A
als A_A1.1
Jetzt denke ich, dass ich Nested HashMaps
dafür verwenden kann. Der Code dafür lautet:
Ist diese Übung in Ordnung? Ich habe eine Menge Buchhaltung zu tun, da ich verschachtelte Hashes verwenden werde, aber zumindest CRUD und Eindeutigkeitsprobleme behandelt sich selbst.
Wenn das nicht in Ordnung ist, könnte jemand eine andere bessere Struktur vorschlagen, die ich benutzen kann?
Sie möchten offensichtlich einen Baum modellieren. Dieser Baum ist nicht unbedingt explizit mit TreeMap
verknüpft. Und zugegebenermaßen kann ich nicht sehen, wie eine TreeMap
dabei helfen könnte, die ganze Struktur darzustellen (obwohl sie in den einzelnen Baumknoten verwendet werden könnte).
Sie könnten eine Klasse wie diese erstellen
%Vor%(nur eine kurze Skizze)
Dann könnten Sie die Hierarchie so aufbauen
%Vor%Dies würde Ihnen bereits erlauben, in der Hierarchie zu navigieren, und die Pflege der Beziehungen wäre ziemlich einfach.
Ich habe nicht ganz verstanden, was Sie über die "Einzigartigkeit" gesagt haben. Auf jeden Fall wird in einem solchen Baum jeder Knoten eindeutig durch den Pfad identifiziert. Sie könnten sogar eine Hilfsmethode wie
erstellen %Vor%um schnell auf ein Objekt über die Sequenz von Knotennamen zuzugreifen.
Zur Seite: Wie bereits erwähnt, sind tief verschachtelte Karten (oder Listen oder Mengen) fraglich. Aber unabhängig davon sollten Sie immer Schnittstellen verwenden, wie in
%Vor%Dies könnte für bestimmte Anwendungsfälle OK sein, aber abhängig von was genau Sie modellieren möchten (und insbesondere wenn es eine andere Ebene gibt), könnte dies bereits geschehen unbequem sein.
Ihr Vorschlag ist nicht ratsam.
Unter der Annahme, dass Ihre Anforderungen in der Lage sein müssen, ein Element in O (log (n)) -Zeit basierend auf einem Schlüssel abzurufen. Ich würde vorschlagen, eine der folgenden Lösungen als eine bessere Lösung für dieses Problem zu verwenden:
Tags und Links java data-structures hashmap