我正在用 Java 实现一个通用堆类。这个类有两个构造函数,一个是没有参数的默认构造函数。另一个接受用户可以传入的比较器对象,以便用户可以控制如何比较堆的元素。现在,如果用户使用默认构造函数,我希望我的类用于默认比较器对象。此对象的 compare 方法只是调用 compareTo() 方法(Comparable 接口的一部分)。有没有办法做到这一点,如果有,怎么做?
问问题
3237 次
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 的任意两个Object
s 并在它们实现时进行比较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 回答