Datentypen Wie Daten am besten organisieren?

bur

Mitglied
Ich möchte für ein Programm eine Art Datenbank haben die für bestimmte chemische Element eine beliebige Anzahl an Verbindungen enthält, die dieses Element enthalten.

Also zB für Magnesium (Mg) sollen MgCO3, MgO, MgC2O4 gelistet sein und für Natrium (Na) sollen NaCl, NaCO3 usw aufgelistet sein. Keine Verbindung soll mehr als einem Element zugeordnet sein. Ich hoffe die Struktur ist auch für Nicht-Chemiker verständlich?

Auf Autos übertragen: Für eine bestimmte Anzahl an Autoherstellern sollen unterschiedliche Anzahlen an Modellen gespeichert werden. Es soll möglich sein auf die Modelle in Abhängigkeit vom Hersteller zuzugreifen. Also eine Anfrage nach "Mercedes" gäbe "E-Klasse", "S-Klasse" usw zurück.

Insgesamt geht es um vielleicht 10 chem. Elemente mit insgesamt 30 Verbindungen die ihnen zugeordnet sind. Eine externe Datenbank wäre daher vermutlich überdimensioniert.


Die erste Möglichkeit die mir einfiel wäre ein String[anzahlChemElemente][] in dem die Verbindungen nach Ordnungszahl ihrer zugehörigen chem. Elemente sortiert sind. Also in der Art
Code:
{ { }, { }, ... ,{ NaCl, NaCO3 }, ... , { MgCO3, MgO, MgC2O4 }, ... }
. Das hätte aber den Nachteil dass viele Felder leer sind, nämlich da wo es zu einem chem. Element keine Verbindungen gibt. Der Vorteil wäre der einfache Zugriff, da ich eh eine Methode habe die zu einem chem. Element die Ordnungszahl liefert.

Eine andere Möglichkeit wäre es die Verbindungen unsortiert in einem String[][] zu verpacken und die passende Position in einem zweiten Array zu speichern. Dann müsste man bei jedem Zugriff zunächst in einem Index-Array die Position suchen um dann auf verbindungen[idxGesuchtesElement][x] zugreifen zu können. Bei etwa 10 Elementen auch kein großer Aufwand und in einer Methode gut zu verpacken.

Aber vielleicht gibt es ja noch eine bessere, einfacher zu verwaltende Lösung? Vor allem falls später mal weitere Verbindungen hinzugefügt werden sollen.
 
Würde ich auch in einer
Code:
HashMap<String,List<String>>
realisieren und dann prüfen, ob wirklich jede Verbindung auch nur einmal auftaucht.
 
Danke, HashMap kannte ich gar nicht, klingt nach dem was ich jetzt kurz gelesen habe sehr passend.


Heißt das, NaCl ist nur Na zugeordnet und nicht Cl?
Genau. Es geht fast immer um die Kationen (wen es interessiert, Thema ist Festkörpersynthese). Jede Verbindung ist nur einem Element zugeordnet. Von daher passt die HashMap mit Schlüssel -> Wert recht gut, vermute ich.
 
Würde ich auch in einer
Code:
HashMap<String,List<String>>
realisieren und dann prüfen, ob wirklich jede Verbindung auch nur einmal auftaucht.

Warum extra prüfen? Da sollte [c]Map<String, Set<String>>[/c] o.ä. doch einfacher sein.

Besser wäre natürlich [c]Map<Element, Set<Verbindung>>[/c] (und ggf. das nochmal wrappen), weil dann alleine der Typ wertvolle Informationen über den Inhalt liefert.
 

Zurück
Oben