Wie benutze ich einen Satz von Elementen als Schlüssel in Java Maps?

9

Ich möchte einen Wert basierend auf einem Schlüssel speichern, der sich aus einem Satz von Elementen zusammensetzt. So etwas wie das Beispiel unten. Natürlich weiß ich, dass mein Pseudo-Beispiel nicht funktionieren würde, da der Hash des Objekts wahrscheinlich seine Adresse sein wird, die für jede neue Instanz unabhängig von ihrem Inhalt eindeutig ist.

%Vor%

Natürlich kann ich die SET-Werte einfach als String mit einem Trennzeichen sortieren und verketten und das in einer HashMap<String, String> -Struktur verwenden, aber das fühlt sich einfach nicht richtig an. Ich bin ziemlich neu in der Java-Programmierung, also könnte es eine offensichtliche Lösung geben, die ich vermisse.

    
ddinchev 13.05.2015, 11:07
quelle

4 Antworten

7

Wenn Sie HashSet<Integer> anstelle Ihrer benutzerdefinierten SET verwenden (ich gehe davon aus, dass es eine benutzerdefinierte Klasse ist), würde es gut funktionieren, da HashSet hashCode und equals überschreibt (um genau zu sein, HashSet erweitert AbstractSet , was diese Methoden überschreibt), so dass es als Schlüssel in einem HashMap dienen kann.

Wenn Sie jedoch ein Set ändern, das als Schlüssel in Ihrer Map dient, können Sie diesen Schlüssel später in der Map nicht finden. Dieses Risiko besteht, wenn Sie veränderbare Objekte als Schlüssel in einer HashMap verwenden.

%Vor%

Dies gibt w00t aus.

    
Eran 13.05.2015, 11:10
quelle
0

Erstellen Sie eine Auflistungsklasse, und überschreiben Sie hashcode () so, dass derselbe Hashcode für verschiedene Auflistungsinstanzen mit demselben Inhalt zurückgegeben wird. Sie können die Methode in einer Klasse überschreiben, die von Ihrer gewünschten Sammlung stammt. Sie müssen auch gleich (Objekt o) neu implementieren.

    
Traubenfuchs 13.05.2015 11:11
quelle
-1

Es hängt von der Implementierung der SET-Klasse ab. Sie können entweder die Klasse java.util.HashSet erweitern oder die Methoden equals() und hashCode() in Ihrer SET-Klasse implementieren. Jede Lösung wird funktionieren.

    
SanyaLuc 13.05.2015 11:22
quelle
-2

Sie haben der Karte kein Set b hinzugefügt. Fügen Sie zunächst beide Mengen hinzu und versuchen Sie, den Wert b mit dem Wert zu verknüpfen.

    
user4895454 13.05.2015 11:12
quelle

Tags und Links