自然排序和TreeSet(Comparator <! - ?super E - > comp)构造函数的解释

时间:2012-12-13 11:09:20

标签: java

我只是希望有人向我解释一件事。根据Java文档:可比较的接口对实现它的每个类的对象强加一个总排序。这种排序被称为类的自然排序,类的compareTo()方法被称为它的自然比较方法。现在我们知道类String实现了Comparable,那么当我们创建一个String对象时会发生什么?这里的自然顺序是什么?

class Com implements Comparator<String>{
public int compare<String>(String a,String b){
String s1=a; String s2=b;
return s2.compareTo(s1);
}
}

现在假设Main()方法中有这个片段:

TreeSet<String> ts=new TreeSet<String>(new Com());
ts.add("C");
ts.add("A");
ts.add("B");

现在,当第一个C被添加时,TreeSet中没有现有元素,那么会发生什么呢?那么比较是如何进行的呢?

当B被添加时,发生了什么。如果你告诉我在这里顺序发生的流程,我会很有帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

这是从TreeMap源(JDK 1.6.0-30)中剪切的(TreeSetTreeMap支持,除非明确选择了另一个集合)

public V put(K key, V value) {
    Entry<K,V> t = root;
    if (t == null) {
        root = new Entry<K,V>(key, value, null);
        ...
        return null;
    }

如您所见,如果地图为空(根为空),则只需添加值。没有比较。

至于添加AB,我会把它作为练习留给你,实际上有一些很好的学习!

干杯,

答案 1 :(得分:0)