HashSet:
    HashSet实现Set接口,由哈希表支持,它不保证set的迭代顺序,特别是它不保证该顺序永久不变,允许使用null

    关键属性:private static final Object PRESENT = new Object();

    无参构造器:
    public HashSet() {
    map = new HashMap<>();
    }

    add方法:
    public boolean add(E e) {
    return map.put(e, PRESENT)==null;
    }
    实际上就是将数据存储在HashMap中,key就是添加的内容,value是一个固定空对象

    特点:
    底层数据结构是哈希表,HashSet本质上一个没有重复元素的集合,他是通过HashMap实现的,底层有一个HashMap类型的成员变量map。

    TreeSet:
    基于TreeMap和NavigableSet实现的,使用元素的自然顺序进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法

    无参构造:
    public TreeSet() {
    this(new TreeMap());
    }

    add方法:
    public boolean add(E e) {
    return m.put(e, PRESENT)==null;
    }
    实际上就是将数据存储在TreeMap中,key就是添加的内容,value是一个固定空对象