TreeSet和HashSet类似,但是TreeSet是一个有序的集合,内部的排序是使用红黑树完成的,因为排序,所以放入TreeSet集合中的元素都必须实现Comparable接口。

从这个继承层次中我们发现TreeSet也聚合了Map的实现,那么是不是和HashSet一样,调用了Map的实现之后,TreeSet自己就什么都不做了呢,看看TreeSet里面都有什么:
/**
* The backing map.
*/
private transient NavigableMap<E,Object> m;
/**
* Constructs a set backed by the specified navigable map.
*/
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
public TreeSet() {
this(new TreeMap<E,Object>());
}
// ... more code
从定义的属性和构造函数看,好像是这样的,为了确认,我们再找几个方法看看:
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
public int size() {
return m.size();
}
public E lower(E e) {
return m.lowerKey(e);
}
是的吧,真的是调用了Map的实现,那么现在就可以得出一个结果了,在JDK的集合只能够,Set的实现都是调用Map的实现,那么问题来了,Map到底是怎么实现的?