简述
Set是一个接口类,提供了一个Set基本方法的声明。
Set的实现类
- AbstractSet
- HashSet
- TreeSet
Set的子接口
SortedSet
HashSet
//存储数据
private transient HashMap<E,Object> map;
// Map的value值
private static final Object PRESENT = new Object();
HashSet通过HashMap的key来确保set中元素的唯一性。内部通过HashMap来存储。所以它对应的contain、add、remove方法都是用过对map的操作。使用委托模式,好处在于需要修改JDK中的与Hash有关的方法时只需要修改HashMap的实现。
TreeSet
//使用TreeMap
private transient NavigableMap<E,Object> m;
private static final Object PRESENT = new Object();
如何实现排序的?
通过TreeMap来实现排序,要求Key必须实现Comparator接口,通过Comparator来判断大小来排序。
为什么需要实现NavigableSet接口
因为当前是一个TreeSet提供了有序的排列,NavigableSet中的接口的方法是一些导航方法。提供了许多快速查询的方法。SortedSet提供了基本有序Set的方法。