网上的很多答案都是:
“Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
    equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。”我感觉“用iterator()方法来区分重复与否”这句话不对吧,这不是用来循环的吗?set

解决方案 »

  1.   

    Set里的元素是不能重复的,元素重复与否是使用equals()方法进行判断的。 
       equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
    当然不是iterator()
      

  2.   

    你直接用set的contains(Object o)比较就可以得到答案了 equals() 方法还不是的看这个equals()方法里比较的是什么撒  除非你自己写一个
      

  3.   

    重写hashcode 和equals 方法
      

  4.   

    建议楼主,一般情况用equal,别yong"==",当然这只是我的一点点开放经验。
      

  5.   

    哈哈,现在的问题是set集合判断重复是用什么?而不是equal和==的区别,貌似跑题了
      

  6.   

    难道CSDN没有人能正面回答一下这个问题吗?
      

  7.   


    判断是否重复肯定是比较的表面值  你可以试试new两个一样的String装就明白了  但是比较表面值 不一定就是equals方法  equals方法只是在很多地方使用时是比较表面值的方法  
      

  8.   

    我的意思是:
    我感觉“用iterator()方法来区分重复与否”这句话不对吧,这不是用来循环的吗
    主要是这个
    至于equals和===的区别我一年前就清楚了
      

  9.   

    看来这个问题很容易看跑题的,我再说一次我的问题吧,如下:我感觉“用iterator()方法来区分重复与否”这句话不对吧,这不是用来循环的吗? 
      

  10.   


    不管你怎么判断,都需要把set里的元素一个一个地拿出来对比一下,我觉得这句话的意思是,用iterator()方法来遍历set里已有的元素,把它们一个一个地拿出来,然后再做真正的对比。
      

  11.   

    重写hashcode()和equals()方法,其实contains()方法内部也是调用的equals()方法。
      

  12.   

    重写 equals() hashCode()
      

  13.   

    这个问题,我个人感觉是java的不妥之处。本来它是说不能放相同的元素,也就是说是比较两个对象,但是实际上是比较它的equals() hashCode();它是用Hash码的方式存放的,根据它的hashCode()找到它储存的位置。
      

  14.   

    当使用HashSet时,hashCode方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致:
    1. 如果不一致,直接加进去;
    2. 如果一致,再进行equals方法的比较,equals如果返回true,表示对象已经加进去了,就不会再增加新的对象;否则加进去。
      

  15.   

    set中每个对象都是按hashcode存放的,当再次加入一个对象时,先算出该对象的hashcode,再到对应的存放区域寻找是否有相同的hashcode,如果有相同的,再比较equals方法,如果还相同,则不能再次加入该对象。不好意思,语言组织不好。
      

  16.   

    ps:add时并不会遍历set中所有对象
      

  17.   

    equals貌似堆中new出来的比较   == 貌似是比较栈中地址  
      

  18.   

    可以查下Set这个类的源码!!  它的子类HashSet 是用hashcode来区别的!
     public V put(K key, V value) {
            if (key == null)
                return putForNullKey(value);
            int hash = hash(key);
            int i = indexFor(hash, table.length);
            for (Entry<K,V> e = table[i]; e != null; e = e.next) {
                Object k;
                if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                    V oldValue = e.value;
                    e.value = value;
                    e.recordAccess(this);
                    return oldValue;
                }
            }        modCount++;
            addEntry(hash, key, value, i);
            return null;
        }
    来循环遍历比较是否重复的
      

  19.   

    重写hashcode 和equals 方法..