Comparable interface shows that the class knows how to compare ITSELF
against another class.
Comparator interface allows a single class know how to compare two
The Comparable interface is (IMO) best used to implement a natural order
for lists of elements of the class. For example the low-to-high order of
numbers represented by the Integer class. This ties in nicely with the
order used by the variants of TreeSet, TreeMap, Arrays.sort() and
Collections.sort() where no Compataror is specified.
The Comparator interface is then used to create exotic orders, where
exotic is anything not implemented by the Comparable interface. This also
means the most obvious order for elements if a class doesn’t implement
Comparable, though a subclass may sometimes be a better choice then.