Comparators vs Comparable
From charlesreid1
What are they?
Comparable - an object is comparable if it can be compared with other objects of a given type, done by extending Comparable and implementing compareTo method
Comparator - a comparator is a standalone object whose sole purpose is to compare two objects.
why comparable
The advantage of using a comparable is that you can compare objects directly, and define the comparison behavior as being inherent to the object itself. This is obviously the "normal" model.
why comparator
Comparators offer some interesting advantages. First, by using an object to perform comparisons, you abstract yourself from the implementation details of how the comparison is performed. You define a comparator object that defines how the comparison works, somewhere in your own code. You can then pass that comparator into another class and allow it to use your own, custom criteria for performing comparisons.
(Another interesting use case is comparing objects of different types.)
comparators over comparable
Use comparators - they are much more flexible. The comparator itself is easy to define. Providing a default comparator is also a good move.