Ich grübele seid Tagen an einer vernünftigen Datenstruktur für eine 3-stufige Hierrchie aus ID->Wert Paaren. Genaugenommen ist es die Hierarchie Bundesländer->Kreise->Gemeinden wobei jedes dieser Dinge eine ID und einen nicht eindeutigen Namen hat. Die ID ist Amtlicher Gemeindeschlüssel ? Wikipedia .
Das ganze ist in einer flachen Tabelle gespeichert und es ist nötig das die komplette Tabelle (mit Hierarchie) auf den Client (ein WebBrowser) geladen wird bzw. eben als Java-Objekt(GWT macht ein JS"Objekt" draus) verfügbar ist. Mein erster Ansatz ist eine Map<String, Map<String,<List<String>>>> also Map<BundeslandID, Map<KreisID,<Liste<GemeindeID>>>>.
Nur fehlen dann die Namen, die könnte ich in einer weiteren Map<Id->Name> halten, aber genau an diesem Punkt kommt mir das alles etwas ineffizient (was den Speicher betrifft) vor. Andererseits in der Map anstelle von String String[2] zu speichern kommt mir auch nicht sehr glorreich vor?!
UseCases sind folgende: gib alle BdLänder/Kreise/Gemeinden, gib alle Kreise zu einem BdLand, gib alle Gemeinden zu einem BdLand, gib alle Gemeinden zu einem Kreis.
Gibt es aus dem Stand eine bessere Lösung für Probleme dieser Art?
Oder könnte ich über eine geschickte (um)Kodierung der IDs mit einer Map auskommen? (die entsprechenden DB-Abfragen basieren alle auf "like" - sie Fragen ob die ID mit z.b. "01" beginnt -> alles was zu Schleswig-Holstein gehört). Damit würde ich bei jedem UseCase immer über alle iterieren aber nur die "benötigten" Einträge Filtern. Wenn das Filtern effizient ist (eine sehr einfach Operation) hätte ich viel Speicher gespart aber nicht sehr viel mehr CPU verbraten?!
Das ganze ist in einer flachen Tabelle gespeichert und es ist nötig das die komplette Tabelle (mit Hierarchie) auf den Client (ein WebBrowser) geladen wird bzw. eben als Java-Objekt(GWT macht ein JS"Objekt" draus) verfügbar ist. Mein erster Ansatz ist eine Map<String, Map<String,<List<String>>>> also Map<BundeslandID, Map<KreisID,<Liste<GemeindeID>>>>.
Nur fehlen dann die Namen, die könnte ich in einer weiteren Map<Id->Name> halten, aber genau an diesem Punkt kommt mir das alles etwas ineffizient (was den Speicher betrifft) vor. Andererseits in der Map anstelle von String String[2] zu speichern kommt mir auch nicht sehr glorreich vor?!
UseCases sind folgende: gib alle BdLänder/Kreise/Gemeinden, gib alle Kreise zu einem BdLand, gib alle Gemeinden zu einem BdLand, gib alle Gemeinden zu einem Kreis.
Gibt es aus dem Stand eine bessere Lösung für Probleme dieser Art?
Oder könnte ich über eine geschickte (um)Kodierung der IDs mit einer Map auskommen? (die entsprechenden DB-Abfragen basieren alle auf "like" - sie Fragen ob die ID mit z.b. "01" beginnt -> alles was zu Schleswig-Holstein gehört). Damit würde ich bei jedem UseCase immer über alle iterieren aber nur die "benötigten" Einträge Filtern. Wenn das Filtern effizient ist (eine sehr einfach Operation) hätte ich viel Speicher gespart aber nicht sehr viel mehr CPU verbraten?!