I know that there is http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html but I'm genuinely confused about them and would appreciate any english translation if at all possible.
I know that it contains the compare(blah, blah) method but how does that work?
Videos
6 Advanced Comparator and Comparable Examples in Java 8 for Sorting ArrayList Objects By Fields
java - When to use Comparable and Comparator - Stack Overflow
Noob Programmer, ELI5: Comparators?
Comparator vs Comparable
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.
See also:
- Sorting an ArrayList of objects using a custom sorting order
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.