HashSet源码学习小结
部分源码如下:
private transient HashMapmap; 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 获取是否添加成功;