HashMap mit 2 Keys (JAVA)?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      HashMap mit 2 Keys (JAVA)?

      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.

      Danke an xNiGhTMaR3x für die Signatur und Avatar =)

      dongdong schrieb:

      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...

      Java-Quellcode

      1. import java.io.Serializable;
      2. public class Key implements Serializable{
      3. public String key1;
      4. public String key2;
      5. public Key(String key1, String key2) {
      6. this.key1 = key1;
      7. this.key2 = key2;
      8. }
      9. @Override
      10. public boolean equals(Object o) {
      11. if (o instanceof Key) {
      12. Key keyToCheck = (Key) o;
      13. if (keyToCheck.key1 == this.key1) {
      14. return true;
      15. } else if (keyToCheck.key2 == this.key2) {
      16. return true;
      17. }
      18. }
      19. return false;
      20. }
      21. }
      Alles anzeigen


      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 X(

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von killer110 ()

      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.

      Danke an xNiGhTMaR3x für die Signatur und Avatar =)