假设我有下面的类。以哈希值为基础的对象抽取集合
class S{
String txt = null;
S(String i){
txt=i;
}
public static void main(String args []){
S s1 = new S("a");
S s2 = new S("b");
S s3 = new S("a");
Map m = new HashMap();
m.put(s1, "v11");
m.put(s2, "v22");
m.put(s3, "v33");
System.out.println(m.size());
}
//just a plain implementation
public boolean equals(Object o)
{
S cc = (S) o;
if (this.i.equals(cc.i))
{
return true;
}
else
{
return false;
}
}
public int hashCode()
{
return 222;
}
}
这会在上面运行时返回大小为2。它完全好。如果我们评论hashCode(),它返回3,这也是正确的。但是如果我们评论equals并保留hashCode,它应该返回2对吗?相反,它返回3.当把对象放到hashmap map中时,会检查一个对象的哈希码,如果它相同,它会将之前的地图值替换为新的哈希值。
谢谢。