何时使用Comparable和Comparator

我有一个需要在字段上排序的对象列表,比如Score。 没有太多的想法,我写了一个实现比较器的新类,它完成任务并且工作。

现在回顾一下,我想知道是否应该让我的类实现Comparable,而不是创建一个实现Comparator的新类。 分数是对象将被排序的唯一字段。

  • 我做了什么可以接受的做法?

  • 是正确的方法“首先将类实现为Comparable(用于自然顺序),如果需要替代字段比较,则创建一个实现Comparator”的新类?

  • 如果上面的(2)是真的,那么是否意味着只有在类实现Comparable后才能实现Comparator? (假设我拥有原始类)。


  • 我想说如果一个对象应该实现Comparable(如果这是对类进行排序的明显的自然方法),并且任何需要对类进行排序的人通常都希望这样做。

    但是,如果排序是该类的不寻常使用,或者排序只对特定用例有意义,那么比较器是更好的选择。

    换句话说,鉴于类名,是否清楚类似的东西会如何分类,还是你不得不诉诸阅读javadoc? 如果是后者,那么很可能每个分类用例都需要一个比较器,在这一点上,可比较的实现可能会降低该类用户的速度,而不会加快他们的速度。


    如果要定义有问题的对象的默认 (自然)排序行为,则使用Comparable ,通常的做法是使用该对象的技术或自然(数据库?)标识符。

    如果要定义外部可控排序行为,请使用Comparator ,这可以覆盖默认排序行为。


    使用Comparable

  • 如果对象在你的控制之下。
  • 如果比较行为是主要的比较行为。
  • 使用Comparator

  • 如果该对象不在您的控制范围内,并且您无法使其实现Comparable
  • 当您想要比较与默认(由Comparable指定)行为不同的行为时。
  • 链接地址: http://www.djcxy.com/p/16355.html

    上一篇: When to use Comparable and Comparator

    下一篇: ConcurrentHashMap and Hash table difference