Comparator : Java Glossary



java.util.Comparator is used to define a special sort order for a class.

To implement java.util.Comparator you must write two methods. It typically describes a small delegate object passed to a sort to describe some special sort order. The compare method compares two objects of the class you want to sort. The equals method compares this java.util.Comparator to another to see if they represent the same order. It does not compare two objects of the class you want to sort. Normally you also redefine equals when you implement Comparator even though it is not part of the Comparator interface. There are no generics involved

public final int compare( Object o1, Object o2 );
public boolean equals( Object obj );

Here is a typical routine:

If you are using a java.util.Comparator only once, you might implement it as an anonymous

Here is a very general purpose Comparator for sorting rows of a Table (array of arrays


Descending/Inverse/Reverse Order with reverseOrder

Sorting ascending order means sorting with the small elements first then the big. This is usual ordering. Descending order means sorting with the big elements first then the small.

If you have a Comparator or Comparable of some kind, you can convert it into one that sorts into the reverse of the usual order, e. g. if the original sorts alphabetically, the new one will sort in reverse alphabetical order. Here is how you use it:

If you don’t have a suitable base Comparator, just write an ordinary Comparator from scratch and reverse the operands to each compare inside it, or return - result instead of result.

Comparator Using Generics

You don’t need any casts since the compiler checks that no non-Pair classes ever get inside the ArrayList<Pair>.

Sometimes you don’t know the types you are comparing at run time and generics just get in the way since they insist you know at compile time. It seems, no matter what you do, you get warning and error messages about generics when all you are trying to do is write code the way you did in Java version 1.4 before generics were invented. Here is a trick to get generics out the way, compliments of Mike Schilling:

Learning More

Oracle’s Javadoc on Comparable class : available:
Note java.lang.Comparable but java. util.Comparator.
Oracle’s Javadoc on Comparator class : available:
Oracle’s Javadoc on Collections.reverseOrder() : available:
Oracle’s Javadoc on Collections.reverseOrder(Comparator) : available:
Oracle’s Javadoc on String.CASE_INSENSITIVE_ORDER : available:

This page is posted
on the web at:

Optional Replicator mirror
on local hard disk J:

Canadian Mind Products
Please the feedback from other visitors, or your own feedback about the site.
Contact Roedy. Please feel free to link to this page without explicit permission.

Your face IP:[]
You are visitor number