HashMap mit 2 Keys (JAVA)?

  • Hallöchen ich hätte da ein Problem.


    Und zwar möchte ich 2 Keys einem Object zuordnen, sodass bei Übereinstimmung eines Keys, ich das Object abrufen kann.


    Natürlich würde das auch mit 2 Maps gehen, ich würde aber eine "erweiterten" Hashmap bevorzugen, falls es sowas gibt^^


    Vielleicht kennt ja jemand eine passende Klasse ;)



    Danke schonmal im Voraus :)

  • was für einen typ hat dein Value objekt?
    wenn es eine klasse ist (String, Integer, JButton...) und kein primitiver Datentyp (int, float, double...), dann werden nin Hashmaps btw allen variablen etc nur Refferenzen und keine Kopien gespeichert. insofern kannst du einfach das ding zweimal mit unterschiedlichen Keys in eine normale hashmap schmeißen

  • Dein Key kann doch auch eine Klasse sein. Dann erstell dir eine Key Klasse, die die beiden Schlüssel im Constructor übergeben bekommt und überschreibe die Equals Methode.


    wenn er es in eine hashmap stecken will, müsste er die hash()-methode überschreiben, und dafür müsste er sich was über legen dass bei beiden keys, der gleiche hash rauskommt.. klingt für mich nach einen dichken haufen arbeit

  • Scheint zu funktionieren...



    Danke dongdong und Xaw.4 :)



    Edit//


    Okay es funktioniert doch nicht wie gewollt :/


    Hatte eigentl. vor mit containsKey(key) zu überprüfen ob dieser Key im Keyset gefunden wird. Leider wird jetzt nur die hashCode() Funktion der Keyklasse aufgerufen um eben den hashCode des einen Suchbegriffs mit den hashCode der Keyklasse zu vergleichen.
    Da ich aber mit einem String suche und nicht mit der Keyklasse, wird containsKey natürlich nie fündig.


    Wenn ich also containsKey(new Key(key1,key2)) ausführe, wird es gefunden, jedoch würde ich dann immer beide Suchbegriffe, sprich key1 und key1, benötigen....genau das wollte ich ja vermeiden :(


    (Ist ein bisschen schwer zu erklären, hoffe ihr wisst was ich meine xD)


    Jmd ein Vorschlag? :)


    Ahhhhh ich sehe gerade, dass es genau das Problem ist, was Xaw.4 angesprochen hat >.<

  • Du willst also eine Oder-Beziehung aufbauen: "Wenn a oder b, dann c", dann ist die Lösung von xaw.4 das richtige, einfach das Objekt mit beiden Schlüsseln speichern, eine andere Möglichkeit wird es meines Wissens nach nur mit viel Aufwand geben.

  • Du musst nur noch die hashCode Methode generieren. Der Hashcode muss auch nicht einzigartig sein, muss nur immer derselbe raus kommen bei deinem Objekt. Kannst z.B. einfach key1 + key2 zurück geben.