HashSet的源码其实很简单,就是用HashMap去保存元素
下面是部分源码
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
static final long serialVersionUID = -5024744406713321676L;
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
}
HashSet add方法:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
当调用HashSet的add方法时,元素直接作为 HashMap的key,value就是 代码中定义好的静态变量 PRESENT,
插入相同元素时,通过HashMap的特性,完全相同的元素,后插入的会替换掉前者,来实现 去除重复的功能,
public Iterator<E> iterator() {
return map.keySet().iterator();
}
迭代元素的时候就是迭代 hashMap的 keys就行了