我有一個類myDemoClass
存儲名稱和類放在HashMap
。在嘗試覆蓋hashCode()
方法時,即使哈希碼不同,HashMap
也會返回null
。爲什麼?我已經覆蓋了hashCode()
方法,以便即使具有相同的名稱值,不同的對象也將具有不同的哈希碼。不同的哈希碼,但哈希映射不工作
public class myDemoClass {
String name;
int value;
static int i=1;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int hashCode()
{
//return name.hashCode();//now the hashcode are same
return i++;//now the hashcode is different
}
public boolean equals(Object obj)
{
myDemoClass m=(myDemoClass)obj;
if(obj==this)
return true;
if(obj instanceof myDemoClass)
{
return getName().equals(m.getName());
}
return false;
}
}
public class Hashcodes {
myDemoClass m1=new myDemoClass();
myDemoClass m2=new myDemoClass();
HashMap h=new HashMap();
public boolean test()
{
m1.setName("s");
m2.setName("s");
System.out.println(m1.hashCode());
System.out.println(m2.hashCode());
h.put(m1, "a1");
h.put(m1, "b1");
System.out.println(h.get(m1));
System.out.println(h.get(m2));
System.out.println(h.get(m1));
return true;
}
public static void main(String args[])
{
Hashcodes h=new Hashcodes();
h.test();
}
}
不同的散列碼輸出:
1
2
null
null
null
輸出具有相同的散列碼:
115
115
b1
b1
b1