我,因爲我以爲HashMap和Hashtable的行爲應該同樣的方式,當涉及到的hashCode和equals方法有點困惑。在下面的這個例子中,我的關鍵類已經重寫equals方法來總是返回false。不同的行爲爲HashMap和Hashtable的當等於重寫總是返回False
沒有任何一個有可以在這種行爲差異解釋的任何想法,因爲它看起來像輸出是兩個
null值不同
null值
值值1
值Value 2
import java.util.Hashtable;
import java.util.HashMap;
public class HashTest {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
HashMap hm = new HashMap();
KeyClass k1 = new KeyClass("k1");
KeyClass k2 = new KeyClass("k2");
ht.put(k1, "Value 1");
ht.put(k2, "Value 2");
hm.put(k1, "Value 1");
hm.put(k2, "Value 2");
System.out.println("value " + ht.get(k1));
System.out.println("value " + ht.get(k2));
System.out.println("value " + hm.get(k1));
System.out.println("value " + hm.get(k2));
}
}
class KeyClass {
String key;
public KeyClass(String str) {
key = str;
}
@Override
public int hashCode() {
return 2;
}
@Override
public boolean equals(Object obj) {
return false;
}
}
總是返回'equals'方法的對象'FALSE'是無效的,因爲它不符合「equals」的合約。 [上有'hashCode'的實現約束和'equals'方法](http://stackoverflow.com/questions/27581/what-issues-should-be-considered-when-overriding-equals-and-hashcode -in-JAVA) – Raedwald
'==和equals()不是same' – Shark