Java源码分析-HashSet

HashSet的代码量还是很少的,将主要的操作都委托给了HashMap。基于JDK1.8。
支持原创,转载请注明出处。

继承关系

public class HashSet
    extends AbstractSet
    implements Set, Cloneable, java.io.Serializabl

public interface Set extends Collection

可以看到Set实现了Collection接口。

核心成员变量

private transient HashMap map;      

// Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

可以看到HashSet内部封装了HashMap,后面将会看到很多操作都委托给了HashMap。

构造函数

    public HashSet() {
        map = new HashMap<>();
    }

   public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

构造函数也很简单,仅仅是初始化HashMap。

添加元素:add方法

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

将参数e作为key,PRESENT作为value,我们知道key在HashMap里面是唯一的,也就保证了set元素的唯一性。

删除元素:remove方法

    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

还是将任务委托给HashMap。

支持原创,转载请注明出处。
github:https://github.com/gatsbydhn

你可能感兴趣的:(Java源码分析-HashSet)