Set-TreeSet

本文深入探讨了Java集合框架中的TreeSet类,揭示了它如何封装TreeMap来实现排序功能。通过源码分析,我们发现TreeSet依赖于TreeMap的红黑树结构,确保元素按自然顺序或自定义比较器排序。相比于LinkedHashSet,TreeSet依据大小而非插入顺序排序。文章还详细介绍了add和contains等关键操作的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TreeSet

在这里插入图片描述

既然叫TreeSet了,再根据LinkedHashMap的实现情况,我猜测,TreeSet应该是封装了TreeMap

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

TreeSet(NavigableMap<E,Object> m) {
        this.m = m;
}

private transient NavigableMap<E,Object> m;

果不其然。

public boolean add(E e) {
        return m.put(e, PRESENT)==null;
}

public boolean contains(Object o) {
        return m.containsKey(o);
}

所以,TreeSet是封装了TreeMap,TreeMap利用红黑树,Key值是根据大小排序的。而TreeSet是把Key作为Set集合中的元素的,所以TreeSet也能根据大小排序,相比LinkedHashSet是根据插入的先后顺序排序的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值