我可以使用Comparable来订购TreeSet吗?

时间:2016-04-03 19:50:44

标签: java

Oracle文档中有一句话:

  

元素按照它们的自然顺序排序,或者用   比较器在创建时设置,具体取决于哪个   使用构造函数

我想知道Comparable可能用于决定TreeSet的顺序,但我不知道如何证明我的想法,所以我不知道它是对的。任何人都可以给我证明它是否正确的方法吗?任何代码或想法都表示赞赏。

代码是为了更好地解释我的问题。

final class Point implements Comparable<Point>{
    /***************** override compareTo*****************/
    public int compareTo(Point p){}
}

我想使用TreeSet来包含这种对象。为了保持树的顺序(因为TreeSet使用红黑树作为其结构),我应该覆盖一些方法。该文件说我应该使用Comparator作为其基本订单。但我认为&#39;可比较&#39;也适用于在TreeSet

中保留我自定义的顺序

1 个答案:

答案 0 :(得分:2)

正如其他人所说,TreeSet的正常行为是按自然顺序排序,所以如果你实现Comparable则是,默认行为就足够了。

// Sorted by "natural" ordering by default
Set<Integer> naturalSet = new TreeSet<Integer>();

// Different constructor that overrides this default behavior
// with an alternate Comparator
Set<Integer> nonNaturalSet = new TreeSet<Integer>(new NonNaturalComparator());