I have seen classes which implement both Comparable and Comparator. What does this mean? Why would I use one over the other?
Comparable is for providing a default ordering on data objects, for example if the data objects have a natural order.
Comparable
A Comparator represents the ordering itself for a specific use.
Comparator