When to use Comparable and Comparator

I have a list of objects I need to sort on a field, say Score. Without giving much thought I wrote a new class that implements Comparator, that does the task and it works.

Now looking back at this, I am wondering if I should have instead have the my class implement Comparable instead of creating a new class that implements Comparator. The score is the only field that the objects will be ordered on.

  • What I have done acceptable as a practice?

  • Is the right approach "First have the class implement Comparable (for the natural ordering) and if an alternative field comparison is required, then create a new class that implements Comparator" ?

  • If (2) above is true, then does it mean that one should implement Comparator only after they have the class implement Comparable? (Assuming I own the original class).


  • I would say that an object should implement Comparable if that is the clear natural way to sort the class, and anyone would need to sort the class would generally want to do it that way.

    If, however, the sorting was an unusual use of the class, or the sorting only makes sense for a specific use case, then a Comparator is a better option.

    Put another way, given the class name, is it clear how a comparable would sort, or do you have to resort to reading the javadoc? If it is the latter, odds are every future sorting use case would require a comparator, at which point the implementation of comparable may slow down users of the class, not speed them up.


    Use Comparable if you want to define a default (natural) ordering behaviour of the object in question, a common practice is to use a technical or natural (database?) identifier of the object for this.

    Use Comparator if you want to define an external controllable ordering behaviour, this can override the default ordering behaviour.


    Use Comparable :

  • if the object is in your control.
  • if the comparing behaviour is the main comparing behaviour.
  • Use Comparator :

  • if the object is outside your control and you cannot make them implement Comparable .
  • when you want comparing behaviour different from the default (which is specified by Comparable ) behaviour.
  • 链接地址: http://www.djcxy.com/p/16356.html

    上一篇: Java:如何将HashMap <String,Object>转换为数组

    下一篇: 何时使用Comparable和Comparator