Wenn ich den folgenden Code ausführe, dann ist die Ausgabe 2, was bedeutet, dass das Set 2 Elemente enthält. Ich denke jedoch, dass dieser Satz 1 enthalten sollte, da beide Objekte basierend auf Hashcode() Wert sowie .equals()
Methode sind. Scheint wie ein offensichtlicher Fehler in meinem Verständnis?Java: Doppelte Objekte werden zum Set hinzugefügt?
package HELLO;
import java.util.HashSet;
import java.util.Set;
public class Test {
public static void main(String[] args) throws Exception {
Set<Alpha> s = new HashSet<Alpha>();
Alpha a1 = new Alpha();
Alpha a2 = new Alpha();
s.add(a1);
s.add(a2);
System.out.println(s.size());
}
}
class Alpha {
int a = 10;
public int hashcode() {
return a;
}
public boolean equals(Object obj) {
return (obj instanceof Alpha && ((Alpha) obj).a == this.a);
}
public String toString() {
return "Alpha : " + a;
}
}
Danke! Ich würde nie vergessen, @Override mehr zu benutzen :) –
@snow_leopard: Es ist eine gute Angewohnheit, hineinzukommen. Viel Glück! –
Neben "@Override" musste ich auch eine Zeile in der Equals-Funktion hinzufügen, sonst konnte die Menge keine Duplikate erkennen und enthielt immer ein Objekt mit demselben Inhalt mehrfach: if (this.hashCode() == msg. hashCode()) return true; –