源码来自jdk1.8
- HashSet实现了Set接口
- 内部由一个HashMap实现
- 允许一个null值
- 不同步
- add, contains, remove, size O(1)
- iterator fast fail
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
/**
* Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
* default initial capacity (16) and load factor (0.75).
*/
public HashSet() {
map = new HashMap<>();
}
// 省略了其他方法
}
由于是用HashMap实现的,所以每次添加元素的时候,key来存储值,value就是静态的PRESENT。
其他所有的方法都是由调用map里的方法实现的。
网友评论