你必须继承hashCode和equals方法,否则hashset无法判断两个对象是否相等
而且你需要保证a.equals(b)的时候,a.hashCode() == b.hashCode(),在这个前提下尽量使到a.hashCode != c.hashCode();

解决方案 »

  1.   

    现在我就试一下
    a.equals(b)且a.hashCode() == b.hashCode()
    问什么还有两个呢?
      

  2.   

    hashset通过 a.hashCode() % (hashset内部存放对象数组大小) 得到保存到的位置
    而且hashCode通常运算速度比较快,所以其实在判断两个对象是否相等之前会先判断hashCode来提高效率
      

  3.   

    ChDw(米)
    我的意思:我现在已经实现了hashCode和quals,并且都返回固定值。这样两个对象就应该始终一样的。hashSet中的数据就就应该是一个。为什么我的有两个?
      

  4.   

    hashCode只是用来在hash表中做查找用,并不能说两个hashCode相等的实例就完全一样,就算两个实例完全一样,但也是两个实例,你放到hashSet中的仍是两个东西,
      

  5.   

    whyxx(我也是新手) 
    那我因该怎么办?用自己的类放到一个集合中。如果集合中有相同的类(a.equals(b)为true)就不用放!集合类不回不能现在这个功能吧?不会要自己学程序吧??
      

  6.   

    你的equals方法错了!!!equals方法的参数必须是Object对象。
    你应该写
    public boolean equals(Object obj) {
    return true;  
    }