【问题标题】:Writing a default Comparator class in Java用 Java 编写一个默认的 Comparator 类
【发布时间】:2012-10-20 21:52:34
【问题描述】:

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

【问题讨论】:

    标签: java oop comparator comparable


    【解决方案1】:

    我猜一个通用的比较器应该是这样的:

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

    【讨论】:

    • 不应该是可比的吗?
    【解决方案2】:

    使用来自 Apache Commons 的 ComparableComparator,它采用任意两个 Objects 并比较它们是否实现了 Comparable

    或者,不带比较器的构造函数应该强制执行K extends Comparable&lt;K&gt; 类型参数。

    【讨论】:

      【解决方案3】:

      Java 8 有Comparator.naturalOrder(),您可以将其用作默认比较器。详情请见java.util.Comparator API

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-02
          • 2018-08-03
          • 1970-01-01
          • 1970-01-01
          • 2010-11-10
          相关资源
          最近更新 更多