java集合框架HashSet.....

    HashSet hs=new HashSet();
    Person p1=new Person("a1",1);
    hs.add(p1);
    System.out.println(p1);

    重写了hashcode
    public int hashCode() 
{
    System.out.println("hashcode////");
    return name.hashCode()+age;
}
执行结果:
    hashcode////
    hashcode////
    bean.Person@bf1

为什么输出p1却调用了hashcode?
而且还调用了两次,这是什么意思?

hs.add(p1);
调用这一行,会调用hashCode,为什么调用2次,这个要看HashSet它内部怎么实现的。

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

    System.out.println(p1);这句代码会默认调用该对象的toString方法,当你没有重写toString方法的时候,就会调用上面我贴出来的
    这个默认的toString方法,可以很明显的看到,他又调用了hashCode方法,所以就出现了你见到的情况了