在java的源代码中可以看到HashSet的add是调用的HashMap的put方法其中K为add的对象为V一个常量
再来分析下面得put方法public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
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;
}
}
其中的if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
是不是就是进行重复检查?
如果是那iterator好像没有用到啊?
再来分析下面得put方法public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
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;
}
}
其中的if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
是不是就是进行重复检查?
如果是那iterator好像没有用到啊?
iterator只是一个迭代器罢了。
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 可能会在判定对象时可能会出现判定错误,在无法确定set的元素是否重复时,用iterator迭代每个元素进行判定,已确定是否有重复数据.
可能我的问题没描述清楚。Set是不能重复的,这个我知道啊。但是HashSet是通过什么来判断
元素重复的呢?网上有说是iterator但是我看了源代码 根本就没有用到
它啊。。所以问下 是不是网上说的不对还是 我看代码 看错了