Set里的元素是不能重复的,这就是说用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别

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

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

我感觉“用iterator()方法来区分重复与否”这句话不对吧,这不是用来循环的吗?


不管你怎么判断,都需要把set里的元素一个一个地拿出来对比一下,我觉得这句话的意思是,用iterator()方法来遍历set里已有的元素,把它们一个一个地拿出来,然后再做真正的对比。
------解决思路----------------------
当使用HashSet时,hashCode方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致:
1. 如果不一致,直接加进去;
2. 如果一致,再进行equals方法的比较,equals如果返回true,表示对象已经加进去了,就不会再增加新的对象;否则加进去。

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

我感觉“用iterator()方法来区分重复与否”这句话不对吧,这不是用来……

------解决思路----------------------
可以查下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;
    }

来循环遍历比较是否重复的