Java集合 - 覆盖equals和hashCode

0 java collections equals hashcode

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;
  }    
}
Run Code Online (Sandbox Code Playgroud)
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());
  }
}
Run Code Online (Sandbox Code Playgroud)

输出是

inside hash

inside hash
1

由于它返回相同的哈希码,第二次在hashmap中添加一个对象时,它必须使用equals方法,但它不会调用.那么问这个问题呢?

hig*_*ted 7

HashMap与测试==之前.equals,因为你是把相同的对象两次,第一次测试通过.试试:

    Hash j=new Hash(2);
    Hash k=new Hash(2);
    map.put(j,1);
    map.put(k,2);
Run Code Online (Sandbox Code Playgroud)

  • [相关代码](http://www.docjar.com/html/api/java/util/HashMap.java.html)第393行 (2认同)