Schönheitsfrage

Hmm ... eventuell ist es doch sehr viel schöner, wenn ich mir aus den keys für die ersten beiden
HashMaps einen einzigen Key zusammen baue ... zum Beispiel durch key1 + "-" + key2 und
dann nur noch eine HashMap über eine HashMap habe. Das vereinfacht auf jedenfall die
Übersichtlichkeit und da ich garantieren kann, dass die Kombination der beiden Keys wie
oben beschrieben immer noch einzigartig ist, müsste das auch gut gehen.
 
Kann man machen. Finde ich aber nicht schön. Künstliche Keys durch die Verkettung von Strings zu erzeugen ist meiner Meinung nach nicht wirklich robust und auf lange Sicht hin nicht wartbar. Wenn es jetzt um ein kleines Project für das Studium o.Ä. geht ist das kein Problem.
 
Soviel kann ich verraten. Ein kleines Projekt ist es nicht. Da geht es um meine Dissertation. Aber trotzdem finde ich eine HashMap über eine HashMap über eine HashMap unschön und ziehe die Verkettung vor, da ich in diesem Fall garantieren kann,
das die einzel keys jeweils einzigartig sind und damit auch der Gesamtkey einzigartig sein müsste.
 
Dann würde ich wenigesten den Key als eigenes Objekt definieren, kann ja was ganz simples sein:

Java:
public class HashKey{
   String a;
   String b;
  public HashKey(String a, String b){
  // [...]
  }
  // getter und ggfs setter
}

Dann hast du halt einfach eine Map<HashKey,DataObject>

Das hat einfach den Vorteil das wenn du mal auf einen teil deines Keys zugreifen willst du nicht immer den Strign parsen und splitten musst. Oder denke z.B. du serializierst Keys raus und speicherst die irgendwo um sie bei einem späteren Programmstart wieder zu laden. Nach 3 Monaten stellst du fest das der Seperatorcharakter (falls es denn einen gibt) '|' ungümstig ist und du lieber '-' nehmen möchtest. Dann musst du deine rauserialisierten Keys migrieren - oder beide untersützen was die Sachen noch unübersichlicher macht. Wenn du jetzt sagts das du keinen Seperator hast - auch gut, dann verändert sich die Länge eines der Keyteile o.Ä. ;)

Mit dem Object als Key kannst du all solche Fälle transparent handlen. Ich sag ja nicht das es nicht geht wie du es vorhast. Aber wenn du nach "Schönheit" fragst sage ich das es schöner ist sauber objektorientiert zu arbeiten. Das erhöht die Lesbarkeit und Wartbarkeit deines Programms.

Wenn irgendwann mal wer dein Programm übernimmt sieht er so sofot das der Key ein Object mit verschiedenen Teilen ist. Sonst sieht er nur einen langen String ud mus zusehen das er rausbekommt nach welchen Regel der zusammengesetzt ist usw.
 
Zuletzt bearbeitet:
Hmm ... ich hatte von C/C++ Seite aus irgendwie im Kopf dass das mit einem ziemlichen Aufwand verbunden ist.
Aber du hast Recht, dass ist auf jedenfall die sauberere und schönere Variante. Danke für den Tipp.

Gruß
Denis
 
Zuletzt bearbeitet:
Jetzt hab ich allerdings doch noch eine kurze Frage. Ich würde die Keys gerne in einer JList aufzählen lassen. Wie
mache ich das am geschicktesten, dass ich dann auch einen Key auswählen kann und dann das richtige Objekt
dazu bekomme? Angezeigt werden sollen nur die beiden Strings die zu dem Key gehören.
Spontan würde ich einfach die toString() methode überschreiben, was anscheinend auch funktioniert.

Hmmm ... es scheint so als würden plötzlich doppelte HashKeys vorhanden sein. Das sollte doch garnicht
möglich sein. Aber als ich mir die habe ausgeben lassen, waren im Iterator plötzlich doppelte Keys vorhanden.
 
Zuletzt bearbeitet:
Hmm ... hashCode Methode fehlt noch.

Aber das ist trotzdem nicht so einfach. Angenommen ich bekomme einmal die keys in der Reihenfolge:

key1 = "10815";
key2 = "1337";

und einmal in der Reihenfolge

key1 = "1337"
key2 = "10815"

dann müsste das in meinem Fall beides mal auf den gleichen Hash Key gemappt werden. Das ich das Beispiel
mit Zahlen gewählt habe liegt daran dass die Keys XCF Keys sind und damit wahrscheinlich auch immer Zahlen
sind. Aber sicher kann ich mir dabei leider nicht sein.

Ok. Ich habe gerade nachgefragt und mir wurde auch der Tipp gegeben dass erstmal intern als Zahlen zu verarbeiten
und dann die keys einfach nach der Größe zu sortieren und daraus dann nen hash code generieren zu lassen.

Trotzdem bleibt für mich die Frage wie ich die beiden Zahlen so kombiniere, dass ich daraus einen gültigen
HashKey generieren kann.

Ok. Ich werde es so machen, dass in der hashCode Methode ich die beiden Zahlen Keys zu einem String Key
zusammenfasse (mit sperator zwischen den Zeichen) darauf den hashCode berechne und den von der
Methode zurück geben lasse. Dass müsste zu eindeutigen HashKeys führen. Hoffentlich.
 
Zuletzt bearbeitet:
Zurück