HashSet底层使用了HashMap实现,所有的添加查找操作都是HashMap的添加查找,因此先了解HashMap是很有必要的.
先看构造函数
public HashSet() {
map = new HashMap<>();
}
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
HashSet内部保留了一个Map实例,我们知道HashMap保存的是键值对,但是Set只保存值,那么HashMap是如何保存HashSet的值呢?实际上,HashSet的值就是HashMap的键,HashMap的值保存的是一个dummy值,只起到占位的作用,这个dummy值定义如下
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
这样的话,就可以用HashMap来操作HashSet了。
对于HashSet的遍历,那就是返回HashMap键的迭代器
public Iterator<E> iterator() {
return map.keySet().iterator();
}