当你向hashmap中添加内容时,他先根据键值算出哈希值,若算出的哈希已经有了,就比较键值对应的值,没有就直接存入集合,不比较equals方法。看是否相同。相同就不存进集合。
这只是个人理解
你可以在存一些相同键值、不同内容,相同键值及内容,等试一试,在hashCode() ,equals(Object obj)中打印一些话,看什么时候执行他
----------------------------------
public class HsSt {
int i;
int j;
HsSt(int i,int j){
this.i=i;
this.j=j;
}
/**
* @param args
*/
public static void main(String[] args) {
Collection hs=new HashSet();
HsSt h1=new HsSt(1,1);
HsSt h2=new HsSt(1,1);
hs.add(h1);
hs.add(h2);
System.out.println(hs.size());
}
@Override
public int hashCode() {
System.out.println("hashcode.......");
final int prime = 31;
int result = 1;
result = prime * result + i;
result = prime * result + j;
return result;
}
@Override
public boolean equals(Object obj) {
System.out.println("equals............");
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
HsSt other = (HsSt) obj;
if (i != other.i)
return false;
if (j != other.j)
return false;
return true;
}
}
//先比较hashcode,在比较equals; |