white.apple Geschrieben 15. Oktober 2008 Teilen Geschrieben 15. Oktober 2008 Hallo, ich habe mal wieder eine Anfängerfrage :new Ich habe ein Array, das ich auslese. Die Elemente sehen z.B. so aus "db1_typ2", "db2", "db1_typ7", "db9_typ7" Anhand dessen, was vor dem "_" steht(falls vorhanden), weiß ich wie eine Datenbank heißt. Das Andere ist eine Information über den Typ der Db (keine Info ist auch eine Info). Ich suche nach einer Datenstruktur, in der ich die Zugehörigkeit abspeichern könnte, also z.B. typ2 -> db1 typ7 -> db1, db9 usw. Ich dachte an eine Map, sehe aber, dass ein Schlüssel nur einmal vorkommen darf(logisch). Ich könnte die Werte natürlich vorher z.B. in einem Set abspeichern und dann eine Map<String, Set> anlegen aber ich möchte nicht für jeden Typ einen Set anlegen müssen (ich weiß vorher nicht wie viele typen es überhaupt gibt..). Geht das 'on the fly'? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigredeyes Geschrieben 15. Oktober 2008 Teilen Geschrieben 15. Oktober 2008 ich würde von java.util.vector erben und mir einen NamedVector bauen. alles was der noch kann, ist seinen eigenen namen zurück zu geben ( public String getName() ). und im konstruktor wird der name belegt. NamedVector nv = new NamedVector("typ7"); nv.add("db1"); nv.add("db9"): und die ganzen NamedVector kann man dann in einen Vector stopfen. Vector <NamedVector> vectorlist; so ungefähr... bigredeyes Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigredeyes Geschrieben 15. Oktober 2008 Teilen Geschrieben 15. Oktober 2008 ich würde von java.util.vector erben und mir einen NamedVector bauen. alles was der noch kann, ist seinen eigenen namen zurück zu geben ( public String getName() ). und im konstruktor wird der name belegt. NamedVector nv = new NamedVector("typ7"); nv.add("db1"); nv.add("db9"): und die ganzen NamedVector kann man dann in einen Vector stopfen. Vector <NamedVector> vectorlist; so ungefähr... bigredeyes edit: sonst tuts bestimmt auch ne HashMap<String, Vector<String>> Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
white.apple Geschrieben 15. Oktober 2008 Autor Teilen Geschrieben 15. Oktober 2008 Danke für die Antwort. Ich denke aber, dass es ungeeignet wäre: ich laufe durch die Elemente und müsste jedes mal einen neuen Vektor mit Namen erstellen, z.B. "typ7".Was ist wenn im nächsten Schritt "typ9" auftaucht und im übernächsten wieder 7? Wie soll ich da noch auf den entsprechenden Vektor zugreifen? Oder verstehe ich das falsch? Ich hab's anders versucht und zwar habe ich mir eine neue Klasse angelegt: DbData (String db, String typ) Dann habe ich ein Set definiert Set<DbData> dataSet = new TreeSet<DbData>(new DbDataComparator()); Beim Durchlaufen meiner Schleife werden nun die entsprechenden Daten in den Set geschoben, in etwa so: dataSet.add(new DbData("db1", "typ7")); Da ich die DbData mit Gettern ausgestattet habe, kann ich ziemlich billig alle Datenbanken für ein Typ bekommen. Nun möchte ich aber noch fragen ob sich Obiges verbessern lässt? Wie? (Sorry, wenn die Haarspalterei nervt, aber ich möchte wirklich-wirklich was dabei lernen.) Danke für Euer Verständnis Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
white.apple Geschrieben 15. Oktober 2008 Autor Teilen Geschrieben 15. Oktober 2008 edit: sonst tuts bestimmt auch ne HashMap<String, Vector<String>> Ja, das Problem ist NUR, dass ich den Vector zum Zeitpunkt der Erzeugung der HashMap noch nicht habe :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigredeyes Geschrieben 15. Oktober 2008 Teilen Geschrieben 15. Oktober 2008 also, zur hashmap: KEY ist ein string. also dein db1, db9, ... VALUE jeweils ein Vector voller Strings. HashMap <String , Vector<String>> allItems = new HashMap<String , Vector<String>>(); im programm kannst du dann eine funktion hinzufügen public void addToMap(String db, String typ){ if(allItems.containsKey(db)){ allItems.get(db).add(typ); }else{ Vector<String> toAdd = new Vector<String>(); toAdd.add(typ); allItems.put(db, toAdd); } } du kriegst also mit der get-methode den schon erstellten vector für die entsprechende db zurück. das suchen übernimmt die hashmap für dich. bigredeyes Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
white.apple Geschrieben 15. Oktober 2008 Autor Teilen Geschrieben 15. Oktober 2008 Vielen Dank! Wahrscheinlich verbinde ich deine Lösung mit meiner, da -wie sich herausstellte- noch ein weiterer Parameter mit abgespeichert werden soll (und dieser eignet sich als Key besser als Typ). Danke nochmals !! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
white.apple Geschrieben 16. Oktober 2008 Autor Teilen Geschrieben 16. Oktober 2008 Ich weiß doch nicht wirklich weiter Ich hab's etwas komplizierter gemacht(noch eine "Ebene" mehr) deswegen bezieh ich meine Frage lieber auf den letzten Lösungsvorschlag von bigredeyes. Wie könnte ich da die Schlüssel(db) für einen bestimmten (typ) bekommen wo die (typ)s jetzt in einem Vektor sind und somit nicht direkt ansprechbar? Ich möchte gerne für einen definierten (typ) alle (db) bekommen, die ihn in ihrer Liste enthalten. Und noch eine Frage: wenn der Schlüssel nicht einfacher Datentyp ist sondern einer, der aus 2 Komponenten besteht. Kann man dann die Schlüssel aussuchen, die z.B. als 2.tes Element "bah" stehen haben? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.