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