Hallo,
ich habe equals und hashcode in meiner Klasse überschreiben und in einer Collection einfach überprüfen zu können, ob ein Element schon in der Liste existiert. Allerdings werden die überschriebenen Methoden von equals und hashcode von der contains Methode der Collection nicht aufgerufen.
Weißt jemand, was ich falsch mache?
Ein einfaches Beispiel anbei.
Klasse name. Diese Klasse überschreibt equals (und hashcode). D.h. zwei Object sollten meiner Meinung nach gleich sein, wenn sie den selben Namen haben.
Test Program. Leider wird die equals methode von Name gar nicht aufgerufen, obwohl constains equals über die Method indexOf aufruft (im Java Standard Coding).
Viele Grüße, Lars
ich habe equals und hashcode in meiner Klasse überschreiben und in einer Collection einfach überprüfen zu können, ob ein Element schon in der Liste existiert. Allerdings werden die überschriebenen Methoden von equals und hashcode von der contains Methode der Collection nicht aufgerufen.
Weißt jemand, was ich falsch mache?
Ein einfaches Beispiel anbei.
Klasse name. Diese Klasse überschreibt equals (und hashcode). D.h. zwei Object sollten meiner Meinung nach gleich sein, wenn sie den selben Namen haben.
Code:
package testEquals;
public class Name {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object o) {
System.out.println("Should be called!");
if (o instanceof String) {
if (((String) o).equalsIgnoreCase(this.getName())) {
return true;
}
}
return false;
}
}
Test Program. Leider wird die equals methode von Name gar nicht aufgerufen, obwohl constains equals über die Method indexOf aufruft (im Java Standard Coding).
Code:
package testEquals;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Name> list = new ArrayList<Name>();
Name person = new Name();
person.setName("Lars");
list.add(person);
if (list.contains("Lars")) {
System.out.println("Super");
} else
System.out.println("Schade");
}
}
Viele Grüße, Lars