用Java编写默认的Comparator类

时间:2012-10-20 21:52:34

标签: java oop comparator comparable

我在Java中实现了一个通用堆类。这个类有两个构造函数,一个是没有参数的默认构造函数。另一个接收用户可以传入的比较器对象,以便用户可以控制如何比较堆的元素。现在,如果用户使用默认构造函数,我希望我的类用于默认比较器对象。此对象的compare方法只调用compareTo()方法(Comparable接口的一部分)。有没有办法做到这一点,如果有,怎么做?

4 个答案:

答案 0 :(得分:2)

我猜一个通用比较器看起来像这样:

public class ComparableComparator<T extends Comparable<T>> implements Comparator<T> {
  @Override
  public int compare(T lhs, T rhs) {
    return lhs.compareTo(rhs);
  }  
}

答案 1 :(得分:1)

使用来自Apache Commons的ComparableComparator,它需要任意两个Object并在实施Comparable时对它们进行比较。

或者,不带比较器的构造函数应强制执行K extends Comparable<K>类型参数。

答案 2 :(得分:1)

Guava提供“自然排序”Comparator - 可以预见 - Ordering.natural().

答案 3 :(得分:1)

Java 8具有Comparator.naturalOrder(),您可以将其用作默认比较器。有关详细信息,请参阅java.util.Comparator API

相关问题