看你比较什么了,有些类内部重写的equals方法,比如两个Integer的equals()比较就是直接比较其中的两个数值,所以set中对象比较建议使用==号比较Integer中的equals()方法原型,大致为
public boolean equals(Object o)
{
    if(o instanceof Integer)
    {
        return this.intValue()==((Integer)o).intValue();
    }
    else
    {
        return false;
    }
}Object的equals方法原型就是
public boolean equals(Object o)
{
   return this==o;
}

解决方案 »

  1.   

    Set里的对象是我自定义的User对象
    我已经覆写了equals()方法
    测试的时候,我在Set里放了三个User,有两个是刻意让他们相等的
    然后
    ArrayList array = new ArrayList();
        while (iter.hasNext()) {
          User user = (User)iter.next();
          System.out.println(user);
          array.add(user);
        }
        System.out.println("0 equals 1: " + array.get(0).equals(array.get(1)));
        System.out.println("0 equals 2: " + array.get(0).equals(array.get(2)));结果:
    0 equals 1: false0 equals 2: true
      

  2.   

    set中只判断引用是否一样,用==号吧
      

  3.   

    看看你的user类是怎么实现的??
      

  4.   

    to kypfos(夜色太漫长):
    不同的Set实现方式不一样,不过一般都不会只用 == 的 ^_^
      

  5.   

    放假了
    走前说一句
    如果楼主用的是HashSet的话
    如果楼主没有重写hashCode()方法的话
    那么Set中不可避免允许相同的对象存在
    因为HashSet中判断一个对象是否已经存在不是使用equals()方法,而是使用hashCode()方法这就是为什么Effective Java中说:重写equals()方法的同时要重写hashCode()方法如果用的不是HashSet
    再找别的原因 ^_^
      

  6.   

    我用的的确是HashSet
    我想danceflash(Wine) 已经说出了原因:我没有重写hashCode()
    但我没有看过这方面的资料,不懂得怎么重写hashCode()
    看来暂时要用别的办法来替代了.
      

  7.   

    另外,to kypfos(夜色太漫长),我并不是判断引用是否一样,而是判断对象的内容
    所以,==就无能为力了 :(