Engineering Full Stack Apps with Java and JavaScript
You can sort a list of integers based on their natural ordering. You can compare two integers and see which one comes before the other in natural ordering. But how will you compare two objects and sort them in an order. You have two interfaces in Java Comparable and Comparator that will help us compare objects and sort them in an order.
Comparable interface imposes ordering on the objects of each class that implements it. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method.
Lists and arrays of objects that implement this interface can be sorted by Collections.sort and Arrays.sort, respectively.
Objects that implement Comparable interface can be used as keys in a sorted map or as elements in a sorted set, without the need to specify a comparator.
Comparable interface has one method compareTo(T o) that compares this object with the specified object for order.
The compareTo method returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
It is strongly recommended that natural orderings be consistent with equals:
The natural ordering for a class C is said to be consistent with equals if and only if e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2) for every e1 and e2 of class C.
However, null is not an instance of any class, and e.compareTo(null) should throw a NullPointerException even though e.equals(null) returns false.
Comparator interface imposes ordering on some collection of objects.
Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) along with the collection.
Comparator interface has one method compare(T o1, T o2) that compares its two arguments for order.
The compare method returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
It is strongly recommended that natural orderings be consistent with equals:
The natural ordering for a class C is said to be consistent with equals if and only if e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2) for every e1 and e2 of class C.
Unlike Comparable, a comparator may optionally permit comparison of null arguments, while maintaining the requirements for an equivalence relation.
Unlike Comparable, your class need not implement Comparator. So your class is untouched.
Unlike Comparable, where you can sort only based on one field (or one set of fields) in one particular way, you can have different comparators for different fields (or different set of fields) with different set of conditions.
Unlike Comparable, a comparator may optionally permit comparison of null arguments, while maintaining the requirements for an equivalence relation.