A
askmeaboutloom
Gast
Guten Abend,
ich habe ein Problem mit der HashMap containsKey-Methode, wenn ich sie mit selbstgebauten immutablen Objekten benutze.
Beispielobjekt:
Somit ist das Objekt theoretisch immutable. Versuche ich es jetzt aber mit equals vergleichen, funktioniert es nicht.
Eine Lösung war, einfach ein Override für die equals-Methode einzufügen:
Jetzt funktioniert der Vergleich mit equals und sogar mit Listen.
Wenn ich das Beispiel jetzt aber in eine HashMap packe, findet sie es per containsKey nicht.
Wie kann ich meine HashMap dazu bringen, die Objekte zu finden? Ist mein Objekt nicht wirklich immutabel oder fehlt eine Methode? Mit Strings funktioniert selbiges ja auch.
Es würde zwar funktionieren, jedesmal durch die Map durchzuiterieren oder es mit etwas veränderten Objekten in einer Liste zu speichern, allerdings wäre das recht umständlich und löst mein Problem nicht.
Danke im Voraus,
askmeaboutloom.
ich habe ein Problem mit der HashMap containsKey-Methode, wenn ich sie mit selbstgebauten immutablen Objekten benutze.
Beispielobjekt:
Java:
public final class Beispiel {
private final int x;
private final int y;
public Beispiel(int a, int b) {
x = a;
y = b
}
}
Somit ist das Objekt theoretisch immutable. Versuche ich es jetzt aber mit equals vergleichen, funktioniert es nicht.
Eine Lösung war, einfach ein Override für die equals-Methode einzufügen:
Java:
@Override
public boolean equals(Object o) {
if (o instanceof Beispiel) {
Beispiel b = (Beispiel) o;
if ((b.x == this.x) && (b.y == this.y)) {
return true;
}
}
return false;
}
Jetzt funktioniert der Vergleich mit equals und sogar mit Listen.
Wenn ich das Beispiel jetzt aber in eine HashMap packe, findet sie es per containsKey nicht.
Java:
Beispiel b = new Beispiel(1, 2);
if (b.equals(new Beispiel(1, 2)) {
//funktioniert, schreibt Equals
System.out.println("Equals");
}
ArrayList <Beispiel> list = new ArrayList <Beispiel>();
list.add(b);
if (list.contains(new Beispiel(1, 2)) {
//funktioniert, schreibt Liste
System.out.println("Liste");
HashMap <Beispiel, int> map = new HashMap <Beispiel, int>();
map.put(b, 0);
if (map.containsKey(new Beispiel(1, 2)) {
//funktioniert nicht
System.out.println("HashMap");
}
Wie kann ich meine HashMap dazu bringen, die Objekte zu finden? Ist mein Objekt nicht wirklich immutabel oder fehlt eine Methode? Mit Strings funktioniert selbiges ja auch.
Es würde zwar funktionieren, jedesmal durch die Map durchzuiterieren oder es mit etwas veränderten Objekten in einer Liste zu speichern, allerdings wäre das recht umständlich und löst mein Problem nicht.
Danke im Voraus,
askmeaboutloom.