我一直認爲帽子HashMap通過使用hasCode和equals來識別它的關鍵。但是這段代碼仍然沒有給我價值回報。我錯過了什麼?Java如果hashCode相同並且equals爲true,HashMap如何識別關鍵對象?
import java.util.HashMap;
import java.util.Map;
/**
* Created by kic on 25.04.15.
*/
public class TypePair {
private final Class a;
private final Class b;
public TypePair(Class a, Class b) {
this.a = a;
this.b = b;
}
public TypePair(Object a, Object b) {
this.a = a.getClass();
this.b = b.getClass();
}
public boolean isPair (Object a, Object b) {
return this.a.isAssignableFrom(a.getClass()) && this.b.isAssignableFrom(b.getClass());
}
@Override
public boolean equals(Object obj) {
if (obj instanceof TypePair) {
return a.isAssignableFrom(((TypePair) obj).a) && b.isAssignableFrom(((TypePair) obj).b);
} else {
return false;
}
}
@Override
public int hashCode() {
return 1;
}
public static void main(String[] args) {
TypePair a = new TypePair(Number.class, String.class);
TypePair b = new TypePair(12, "hello");
Map<TypePair, Boolean> test = new HashMap<>();
test.put(a, true);
System.out.println(a.hashCode() == b.hashCode());
System.out.println(a.equals(b));
System.out.println("und? " + test.get(a));
System.out.println("und? " + test.get(b));
}
}
此代碼打印:
true
true
und? true
und? null
檢查什麼'b.equals(一)'回報。 – resueman
@resueman該死的,你是對的! – KIC