集合之TreeSet

懵懂的女人 提交于 2019-12-04 10:34:40

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到底是怎么实现的?

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!