我有一个类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