新手读源码__HashSet

时间:2023-02-07 17:01:31

前景

看完了HashMap之后,对hash表的认识加深了,再看看hashSet

HashSet

简介:HashSet也是基于散列而设置的集合,保证了集合的唯一性,无序性

维护的属性

private transient HashMap<E,Object> map;
private static final Object PRESENT = new Object();

一共维护了两个属性,一个是底层实现的Map,一个是Object对象(虚假值,实际上用不到,仅仅作为Map的值)

构造函数

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

通过构造函数我们可以看到Set的底层实现是用的是HashMap

add 增

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

调用了hashMap的put方法,可以看出,为了保证唯一性,存入的元素被当做了键值,然后用一个对象PRESENT象征性的代表值,所以起作用的还是这个键,其它的操作基本上都是用的hashMap就不看了,知道了底层是HashMap就不用深究了。