public void deleteSet()
{
    Student st=new Student(200,"物理");
    Student st1=stSet.get(1);
    //对象值比较不相等,而下面的单独属性比较却是相等的
    if ( st1.equals(st) )
    {
         System.out.println("两个值相同");
    }
    else
    {
         System.out.println("两个值不等");
    }
    if (st.getId() == st1.getId()) 
         System.out.println("Id相同");
    else 
        System.out.println("Id不等!");
    if (st.getName().equals(st1.getName())) 
        System.out.println("Name相同");
    else 
        System.out.println("Name不等!");
    //不知道的为何删除元素失败?
    stSet.remove(st);
    //这样删除却是正确的结果
    //stSet.remove(stSet.get(1));
}stSet是定义的Student类的集合
上面程序结果显示为:
    两个值不等
    Id相同
    Name相同

解决方案 »

  1.   

    应为没有st的引用,你删除st1试试
      

  2.   

    不太明白,能不能将修改的语句写出来,谢谢get(1)的值就是用st后的new创建的
      

  3.   

    你提了两个问题,那个Scanner还没结帖,没想到两个都是我回答的
      

  4.   

    Student类的equals()方法你重写了吗?hashcode()方法呢?
      

  5.   

    Student类的equals()没有重写
      

  6.   

    看remove方法的文档:
    如果 set 中存在指定的元素,则将其移除(可选操作)。更确切地讲,如果此 set 中包含满足 (o==null ? e==null : o.equals(e)) 的元素 e,则移除它。如果此 set 包含指定的元素(或者此 set 由于调用而发生更改),则返回 true(一旦调用返回,则此 set 不再包含指定的元素)。
    需要参数类型定义了equals行为才能起作用
      

  7.   

    你的st加入到集合中了吗?还有set集合所要储存元素,该元素所对应的类需要重写equal和hashcode方法,保证元素的不可重复性
      

  8.   

    重写Student类的equals方法,让name和id都相同的时候返回true就行了,默认的equals方法是根据对象ID判断是否为同一个相等的。
      

  9.   

    你集合里面根本没有把st放进去, 你怎么remove.   还有一个问题,你知道==。和equals的区别吗?