TreeSet源码解读

1.TreeSet简介

TreeSet是基于TreeMap的NavigableSet实现的。

public class TreeSet<E> extends AbstractSet<E>
    implements NavigableSet<E>, Cloneable, java.io.Serializable
{
  • 实现了NavigableSet,支持排序
  • 实现了Colneable接口,可以克隆
  • 实现了Serializable,可以进行序列化和反序列化

2.基本属性

    /**
     * The backing map.
     * 底层map,维护一个NavigableMap型变量,NavigableMap是TreeMap的接口
     */
    private transient NavigableMap<E,Object> m;

    // Dummy value to associate with an Object in the backing Map
    //static final 的PRESENT来填充map的value
    private static final Object PRESENT = new Object();
    
    //构造新的TreeSet,元素按自然排序
    public TreeSet() {
        this(new TreeMap<E,Object>());
    }

3.基本方法

(1)add(E e)

//底层调用treeMap,进行插入操作
//表示任何插入操作,key对应的value都是静态常量PRESENT
public boolean add(E e) {
    return m.put(e, PRESENT)==null;
}

(2)subSet(E fromElement, boolean fromInclusive,

​ E toElement, boolean toInclusive)

//根据key的范围,截取Set,调用的是NavigableSet的方法
public NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
                              E toElement,   boolean toInclusive) {
    return new TreeSet<>(m.subMap(fromElement, fromInclusive,
                                   toElement,   toInclusive));
}

(3)headSet(E toElement, boolean inclusive)和tailSet(E fromElement, boolean inclusive)

//返回视图中的所有元素的值  <= toElement
public NavigableSet<E> headSet(E toElement, boolean inclusive) {
    return new TreeSet<>(m.headMap(toElement, inclusive));
}
//返回视图中的所有元素的值  >= toElement
public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
        return new TreeSet<>(m.tailMap(fromElement, inclusive));
}

(4)spliterator()

//创建key的分割器
public Spliterator<E> spliterator() {
    return TreeMap.keySpliteratorFor(m);
}

总结

TreeSet底层主要还是调用的是TreeMap的方法,是基于TreeMap实现的,简单地讲,就是利用TreeMap的key-value中的key来存储数据,实现有序性和唯一性,而value则是static、final的Object变量填充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值