Hallo,
folgender Code:
erzeugt mir diese Ausgabe:
Aber wenn contains(o) definiert ist als (o==null ? e==null : o.equals(e)), wieso ruft das HashSet dann nicht mal die equals-Methode auf (o ist ja nicht null)?
Danke!
DasBrot
folgender Code:
Java:
public class MyElement {
private String name;
public MyElement(String name) {
this.name = name;
}
public String getName() {
return name;
}
public boolean equals(Object o) {
System.out.println(name+" compared to "+((MyElement)o).getName());
return name.equals(((MyElement)o).getName());
}
}
public class test {
public static void main(String[] args) {
Collection<MyElement> collection1 = new ArrayList<MyElement>();
Collection<MyElement> collection2 = new HashSet<MyElement>();
MyElement e1 = new MyElement("e1");
MyElement e2 = new MyElement("e2");
MyElement e3 = new MyElement("e3");
System.out.println("Adding 3 Elements");
collection1.add(e1);
collection1.add(e2);
collection1.add(e3);
collection2.add(e1);
collection2.add(e2);
collection2.add(e3);
MyElement test = new MyElement("e2");
System.out.println("Checking contains():");
if (collection1.contains(test)) {
System.out.println("Collection1 contains e2");
} else {
System.out.println("Collection1 doesn't contain e2");
}
boolean containselement = true;
if (collection2.contains(test)) {
System.out.println("Collection2 contains e2");
} else {
System.out.println("Collection2 doesn't contain e2");
containselement = false;
}
if (containselement) {
return;
}
System.out.println("Checking again manually:");
for(MyElement e:collection2) {
if (e.equals(test)) {
System.out.println("But Collection2 does contain e2!");
return;
}
}
}
}
erzeugt mir diese Ausgabe:
Code:
Adding 3 Elements
Checking contains():
e2 compared to e1
e2 compared to e2
Collection1 contains e2
Collection2 doesn't contain e2
Checking again manually:
e2 compared to e2
But Collection2 does contain e2!
Aber wenn contains(o) definiert ist als (o==null ? e==null : o.equals(e)), wieso ruft das HashSet dann nicht mal die equals-Methode auf (o ist ja nicht null)?
Danke!
DasBrot