1121

3. Set详解

简介

本篇主要回顾一下Set的三种主要使用的实现类:HashSet、TreeSet、LinkedHashSet

HashSet

老规矩,先看一下继承结构图

没啥特殊的

构造方法

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

底层用HashMap,HashMap的key不能重复,所以HashSet元素也不能重复。

添加方法

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

把元素存在了map的key位置,value 为private static final PRESENT = new Object(),都指向同一个object;

移除方法

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

就是map的remove

TreeSet

继承结构图如下

构造方法

    public TreeSet() {
        this(new TreeMap<E,Object>());
    }

底层又是用TreeMap实现的,下一篇必须搞一下Map了。。
接下去的扫了一遍,全靠TreeMap撑场面。

LinkedHashSet

先放图

刚开始看他没什么东西,都是HashSet的玩意儿,那说好的双向链表呢
细看了一下,还是在HashSet中有一个构造方法:

    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

用了LinkedHashMap,这就对了,方法就不看了,到Map的时候再说

总结

Set全靠Map撑场面,下次继续搞Map!

posted @ 2020-07-30 17:44  凡夫俗子90  阅读(148)  评论(0)    收藏  举报