在向TreeMap中添加对象时,要求对象要么实现了Comparable接口,要么在创建TreeSet时传入了该对象的Comparator比较器,两者选其一即可,否则在添加对象时就会报错。
二者的区别:
Comparable是内比较,如果一个类实现了Comparable接口,那么这个类的实例之间是可以进行比较的。
Comparator是外比较,当一个类没有实现Comparable接口,但是我们仍要进行比较的话,就要通过Comparator比较器来进行比较,除此之外,如果我们对于实现了Comparator接口类本身的比较方法不满意的话,也可以使用外置的Comparator比较器来进行比较,也就是是说,Comparator的优先级是要高于Comparable的。
- 实现Comparable接口
- 传入Comparator比较器
在TreeSet的add(object)方法是通过调用TreeMap的put(key,value)方法来实现的,key为待添加的对象object,value为一个不可变的常量。
- 在put方法中首先判断有没有key对象的比较器,如果没有的化就调用key值自身的comparaTo()方法(前提是key对象实现了Comparable接口)
public V put(K key, V value) {
Entry<K,V> t = root;
if (t == null) {
compare(key, key); // type (and possibly null) check
root = new Entry