Zastanawiam się, co by się stało, gdyby klucz z HashMap
jest zmienny, poniżej program badań pokazują, że i ja jestem w stanie zrozumieć, gdy oba równe i hashCode
metody zwraca wartość true i sam, dlaczego hashmap.containsKey
return false
.Aktualizacja Java HashMap klucz
public class MutableKeyHashMap {
public static void main(String []a){
HashMap<Mutable, String> map = new HashMap<Mutable, String>();
Mutable m1 = new Mutable(5);
map.put(m1, "m1");
Mutable m2 = new Mutable(5);
System.out.println(map.containsKey(m2));
m2.setA(6);
m1.setA(6);
Mutable m3 = map.keySet().iterator().next();
System.out.println(map.containsKey(m2)+" "+m3.hashCode()+" "+m2.hashCode()+" "+m3.equals(m2));
}
}
class Mutable {
int a;
public Mutable(int a) {
this.a = a;
}
@Override
public boolean equals(Object obj) {
Mutable m = (Mutable) obj;
return m.a == this.a ? true : false;
}
@Override
public int hashCode(){
return a;
}
public void setA(int a) {
this.a = a;
}
public int getA() {
return a;
}
}
To wyjście:
prawda fałszywe 6 6 prawdą
Ten artykuł na temat podejścia Pythona może być interesujący: http://pyfaq.infogami.com/why-must-dictionary-keys-be-immutable – jtoberon