schneemensch
Grünschnabel
Hallo zusammen,
ich habe mir ein Coordinate Objekt gebaut welches ich als Key einer Hashtable benutze.
Wenn ich eine Hashtable dann mit einem Eintrag füttere und danach ein neues Coordinate Objekt erzeuge, welches den selben x und y Wert hat bekomme ich nichts zurück.
Genau da liegt mein Problem, woran liegt es, dass ich nichts zurückbekomme? Laut API prüft eine Hashtable nicht auf Identität sondern auf Gleichheit (wenn ich das richtig verstanden habe), also sollte das doch gehen oder?
Vielen Dank für Eure Hilfe.
Schneemensch
ich habe mir ein Coordinate Objekt gebaut welches ich als Key einer Hashtable benutze.
Code:
public class Coordinate{
private int x;
private int y;
public Coordinate(int xcoordinate, int ycoordinate) {
this.x=xcoordinate;
this.y=ycoordinate;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int hashCode(){
int hashcode=x+y;
return hashcode;
}
/Der wird dann in der endgültigen Version natürlich noch ein bisschen komplexer
public boolean equals(Coordinate coord){
if(coord.getX()==this.getX() && coord.getY()==this.getY()){
return true;
}
return false;
}
Wenn ich eine Hashtable dann mit einem Eintrag füttere und danach ein neues Coordinate Objekt erzeuge, welches den selben x und y Wert hat bekomme ich nichts zurück.
Code:
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Hashtable<Coordinate, String> test = new Hashtable<Coordinate, String>();
Coordinate coord = new Coordinate(10,10);
test.put(coord, "test");
Coordinate coord2 = new Coordinate(10,10);
String comp = (String)test.get(coord2);
System.out.println(comp);
if(coord.hashCode()==coord2.hashCode()){
System.out.println("gleiche Hashcodes");
}
if(coord.equals(coord2)){
System.out.println("equals gleich");
}
if(comp.equals("test")){
System.out.println("passt");
}
}
}
Genau da liegt mein Problem, woran liegt es, dass ich nichts zurückbekomme? Laut API prüft eine Hashtable nicht auf Identität sondern auf Gleichheit (wenn ich das richtig verstanden habe), also sollte das doch gehen oder?
Vielen Dank für Eure Hilfe.
Schneemensch