Look closely at the API documentation for both interfaces.
Interface Comparable<T> has a method: public int compareTo(T o)
Interface Comparator<T> has a method: public int compare(T o1, T o2)
You use
Comparable if you want to implement the comparison method into the value object class itself. If you want to keep the comparison method separate from the value object class,
you should use
Comparator and create a separate class that implements that interface.
Sometimes it's desirable to have the comparison method separate from the value object class itself; for example, if there are different possible orderings, you could write different classes that implement Comparator and choose the one you need at a specific point in the program.