class Hash {
int a;
Hash(int h){
a=h;
}
public boolean equals(Object o) {
Boolean h=super.equals(o);
System.out.println("Inside equals ");
return h;
}
public int hashCode() {
System.out.println("Inside Hash");
return 2;
}
}
public class Eq {
public static void main(String...r) {
HashMap<Hash,Integer> map=new HashMap<Hash,Integer>();
Hash j=new Hash(2);
map.put(j,1);
map.put(j,2);
System.out.println(map.size());
}
}
输出
inside hash inside hash 1
由于它返回相同的哈希码,第二次在hashmap中添加一个对象时,它必须使用equals方法,但它不会调用。那么问这个问题呢?
答案 0 :(得分:7)
HashMap
正在==
之前使用.equals
进行测试,并且由于您将相同的对象放置两次,因此第一次测试通过。试试:
Hash j=new Hash(2);
Hash k=new Hash(2);
map.put(j,1);
map.put(k,2);
答案 1 :(得分:0)
HashMap通过三个步骤完成相等性检查:
第二步阻止调用equals
,因为始终假定相同的对象相等。
答案 2 :(得分:-3)
put():将指定的值与此地图中的指定键相关联。 如果地图之前包含此键的映射,则会替换旧值。