网上的很多答案都是:
“Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。”我感觉“用iterator()方法来区分重复与否”这句话不对吧,这不是用来循环的吗?set
“Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。”我感觉“用iterator()方法来区分重复与否”这句话不对吧,这不是用来循环的吗?set
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值
当然不是iterator()
判断是否重复肯定是比较的表面值 你可以试试new两个一样的String装就明白了 但是比较表面值 不一定就是equals方法 equals方法只是在很多地方使用时是比较表面值的方法
我感觉“用iterator()方法来区分重复与否”这句话不对吧,这不是用来循环的吗
主要是这个
至于equals和===的区别我一年前就清楚了
不管你怎么判断,都需要把set里的元素一个一个地拿出来对比一下,我觉得这句话的意思是,用iterator()方法来遍历set里已有的元素,把它们一个一个地拿出来,然后再做真正的对比。
1. 如果不一致,直接加进去;
2. 如果一致,再进行equals方法的比较,equals如果返回true,表示对象已经加进去了,就不会再增加新的对象;否则加进去。
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;
}
来循环遍历比较是否重复的