Set

来源:互联网 发布:网络课件设计师工资 编辑:程序博客网 时间:2024/05/24 06:36

一开始有看源码的时候,最先看的是set,点进源码之后才看到,set内部是用map实现的,花了几天时间看了集中map源码,看完之后也会忘,但是还是有很大收获,读源码的道路还是要继续下去。
HashSet
HashSet继承了AbstractSet,实现了Set、Cloneable、Serializable接口。
HashSet内部的实现方式是HashMap

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

但是set只有value,没有key,所以用了一个final类型的Object作为value

private static final Object PRESENT = new Object();

对set的操作过程都是调用hashMap的方法。
LinkedHashSet
LinkedHashSet继承HashSet,实现了Set、Cloneable、Serializable接口。
LinkedHashSet内部也没有特别的方法,直接使用了父类HashSet的三个参数的构造方法方法

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

也就是说,LinkedHashSet内部是以LinkedHashMap实现的。
TreeSet
TreeSet继承AbstractSet,实现了NavigableSet、Cloneable、Serializable接口。
TreeSet内部使用了TreeMap实现

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

总结

  1. HashSet内部通过HashMap实现,具有HashMap的性质。
  2. LinkedHashSet内部通过LinkedHashMap实现,具有LinkedHashMap的性质。
  3. TreeSet内部通过TreeMap实现,具有TreeMap性质。

JDK版本1.8.0_92。

原创粉丝点击