TreeSet保证元素的 排序和唯一性 的原理

TreeSet:能够对元素按照某种规则进行排序。
1、自然排序(元素具备比较性)。根据元素的自然顺序对元素进行排序 。自然排序需要实现comparable接口中的compareTo()方法,在compareTo方法中定义规则
2、构造器排序(集合具备比较性)。根据TreeSet的构造方法接收一个比较器接口的子类对象Comparator。
具体情况取决于使用的构造方法。无参就是自然排序,否则就是比较器排序
如果一个方法的参数是接口,那么真正要的是这个接口的实现类的对象,而匿名内部类就可以实现。

public TreeSet():构造一个新的空 set,该 set 根据其元素的自然顺序进行排序
public TreeSet(Comparator<? super E> comparator):构造一个新的空 TreeSet,它根据指定比较器进行排序。



自然排序

1、TreeSet是如何保证元素的排序和唯一性的呢?当存储的是Integer类型的元素的情况下举例说明:
通过查看TreeSet的add方法,我们发现它的底层是通过一个Map集合的put方法实现的,因此我们只要去找这个put方法的源码就知道了,我们发现这个Map是NavigableMap类型的,但是NavigableMap居然是个接口,那怎么办呢?于是我们就要想到去找这个NavigableMap接口的实现类看这个实现类的put方法即可。
这里写图片描述


于是我们去看TreeSet的API:果然TreeMap实现了NavigableSet 接口。
public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable :基于 TreeMap 的 NavigableSet 实现。
于是我们又去看TreeMap的API:
public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable:基于红黑树(Red-Black tree)的 NavigableMap 实现。


因此具体类是TreeMap类,因此我们要看add方法的源码就需要去找TreeMap的put方法的源码即可。

private final Comparator<? super K> comparator;     //成员变量

//TreeS
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值