它在O(1)预期时间内运行,就像任何哈希表一样(假设哈希函数是体面的).它由HashMap支持,其中键是Object.
两个对象可能具有相同的哈希码,但HashSet不会认为它们是相同的,除非这些对象的equals方法表明它们是相同的(即返回true).
contains方法调用(间接)HashMap的getEntry,其中key是你希望知道它是否在HashSet中的Object.
如下所示,即使哈希函数的键被哈希函数映射到相同的值,也可以在HashMap / HashSet中存储两个对象.该方法迭代具有相同散列值的所有键,并在每个键上执行等于查找匹配键.
final Entry getEntry(Object key) {
int hash = (key == null) ? 0 : hash(key.hashCode());
for (Entry e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
return e;
}
return null;
}