Wir speichern einen String-Schlüssel in einer HashMap, die eine Verkettung von drei String-Feldern und einem booleschen Feld ist. Das Problem ist, dass doppelte Schlüssel erstellt werden können, wenn das Trennzeichen im Feldwert erscheint.
Um dies zu umgehen, wurde auf der Grundlage der Ratschläge in eine andere Post, ich plane, eine Schlüsselklasse zu erstellen, die als HashMap-Schlüssel verwendet werden soll:
class TheKey {
public final String k1;
public final String k2;
public final String k3;
public final boolean k4;
public TheKey(String k1, String k2, String k3, boolean k4) {
this.k1 = k1; this.k2 = k2; this.k3 = k3; this.k4 = k4;
}
public boolean equals(Object o) {
TheKey other = (TheKey) o;
//return true if all four fields are equal
}
public int hashCode() {
return ???;
}
}
Meine Fragen sind:
- Welcher Wert von hashCode() zurückgegeben werden soll. Die Map wird insgesamt etwa 30 Werte enthalten. Von diesen 30 gibt es etwa 10 verschiedene Werte von k1 (einige Einträge haben denselben k1-Wert).
- Um diese Schlüsselklasse als HashMap-Schlüssel zu speichern, muss man nur die Methoden equals() und hashCode() überschreiben? Ist noch etwas anderes erforderlich?