1

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

4

4 回答 4

2

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

public class ComparableComparator<T extends Comparable<T>> implements Comparator<T> {
  @Override
  public int compare(T lhs, T rhs) {
    return lhs.compareTo(rhs);
  }  
}
于 2012-10-20T21:56:34.590 回答
1

使用ComparableComparator来自 Apache Commons 的任意两个Objects 并在它们实现时进行比较Comparable

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

于 2012-10-20T21:57:38.410 回答
1

Guava 提供了“自然排序” Comparator——可以预见的是—— Ordering.natural()

于 2012-10-20T22:14:59.370 回答
1

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

于 2016-11-30T14:44:31.643 回答