HashSet源码学习小结
部分源码如下:
private transient HashMap<E,Object> map;
private static final Object PRESENT = new Object();
public HashSet() {
map = new HashMap<>();
}
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
public boolean isEmpty() {
return map.isEmpty();
}
由此可知:
- HashSet底层是使用HashMap实现的 , 因为 HashMap 的 key 值不可重复;
- HashMap 在 put 时,若不存在此 key ,则返回null, 若已经存在,则直接返回;所以由 map.put(e, PRESENT)==null 获取是否添加成功;