Java sorting - comparable v comparator
Archive - Originally posted on "The Horse's Mouth" - 2007-02-02 23:08:07 - Graham EllisIn Java, you can sort objects that implement the Collection interface, using either the comparable interface or a comparator class. What's the difference?
A Comparable interfaced class must contain a method called compareTo to compare two objects (one being the object on which it is called and the other being passed as a paramater) which returns an integer, negative for a < b, positive for a > b and 0 otherwise. It must also contain an equals method, returning a boolean, on the same parameters.
A Comparator is a class in its own right, which implements the Comparator interface; that means it must contain a method called compare (two objects as parameters) which returns a negative, zero or positive integer depensing on whether the first object is less than, equal to, or greater than the second.
If you want to sort a collection using its comparable interface, you simply call the static Collections.sort method on it ... so if we had an ArrayList called Actable which implemented Comparable, we could write:
Collections.sort(Actable);
To sort a collection using a Comparator class, you need to pass an extra parameter into the Collections.sortmethod - that parameter being an instance of a Comparator object. Thus:
Collections.sort(Actable, new Bynum());
So in effect, using the comparable interface gives you a default sort order of your own making, whereas the comparator is more flexible as it allows you define a whole series of different types of sorting that can be applied to a whole lot of different types of objects.