0x7F800000
Top Contributor
Naja, was soll man da eigentlich machen?Reden wir hier immer noch von hashCode()? :autsch:
[highlight=Java]
import java.util.*;
public class _ {
private static class X{
private int x;
public X(int _){
x=_;
}
public void setX(int _){
x=_;
}
@Override
public boolean equals(Object other){
if(other instanceof X){
X y=(X)other;
return y.x==this.x;
}
return false;
}
@Override
public int hashCode(){
return x;
}
@Override
public String toString(){
return ""+x;
}
}
public static void main(String... _) {
HashSet<X> set=new HashSet<X>();
X a=new X(1);
X b=new X(2);
set.add(a);
a.setX(2);
set.add(b);
System.out.println(set); // [2, 2] toller set, alles im A****
}
}
[/highlight]
Was soll man tun, wenn die hash-funktion von werten abhängt, die dauernd verändert werden sollen? Ist es da nicht besser den Benutzer der klasse mit einer exception darauf hinzuweisen, dass diese Objekte für Hash-Strukturen einfach nicht gedacht sind? Für (im wesentlichen) immutable objekte ist alles klar, und was macht man eigentlich mit den veränderlichen? :bahnhof: Ich würde eigentlich normal hashCode implementieren, und dann diejenigen elemente, die verändert werden müssen, aus dem set rausholen, verändern, wieder hashen und einfügen.