How to Use Comparable and Comparator in Java

  • google plus

In Brief...

The ordering of a tree set in Java can be dictated using implementations of either the Comparable or Comparator interface. For example, we might want to build a set of integers that we wish to store in numerical order. Such an ordering is considered a "natural order" in Java. Natural ordering can be accomplished by storing items that belong to a class type that implements the Comparable interface. The Integer class, for instance, implements this interface. Therefore, integer variables that are stored in a set are automatically placed in numerical order. The Comparable interface specifies one method, compareTo, that determines how the objects are to be sequenced. This method returns a negative integer, zero, or positive integer to indicate the current object is less than, equal to, or greater than the object passed to method. For example, consider a garden tools class that has two properties: SKU and description. The natural order might be to store the tools in ascending SKU sequence.

If you want to sequence the set in a different order, you can use the Comparator interface. This interface contains one method; compare. For example, we might want to build a set that stores garden tools in ascending description order. Rather than modify the compareTo method (and potentially upset applications that rely on that sequence), we can build a separate class that implements the Comparator interface.

To learn how to use the Comparable and Comparator interfaces, follow these seven steps.

Take our Introduction to Java Training course for free.

See the Course Outline and Register

Instructions

  1. Open your text editor and type in the following Java statements:
    Java Source for Garden Tool
    Notice that the class implements Comparable. The class therefore must implement the compareTo method. Also notice the presence of an equals method. In Java, a set cannot have duplicates. The equals method is called when an object is added to a set to determine if an equivalent object already exists on the set.
  2. Save your file as GardenTool.java.
  3. Open a command prompt and navigate to the directory containing your Java program. Then type in the command to compile the source and hit Enter.
    Compile Source for Garden Tools
  4. Next you will create the program to create various sets using Comparable and Comparator. In your text editor, type in the following Java statements:
    Java Source for Testing Garden Tools
    The program creates three tree sets. The first set stores integers (line 5). The Integer class implements the Comparable interface and therefore the integers will be stored in a natural order, i.e., 1, 2, 3. The next set (created at line 15) stores GardenTool objects. As noted earlier, the GardenTool class implements Comparable and specifies an order of SKU in the compareTo method. The final set is created with a Comparator implementation passed to the constructor (line 24). The implementation class, GardenToolComparator, is contained in the source code. The compare method dictates that objects will be sequenced in description order.
  5. Save your file as UseComparableAndComparator.java.
  6. Open a command prompt and navigate to the directory containing your Java program. Then type in the command to compile the source and hit Enter.
    Compile Source for Testing Garden Tools
  7. Type in the command to run your program and hit Enter.
    Run for Test Garden Tools
    Notice in the output that the integer set is listed in ascending numerical sequence. The next set is listed in SKU sequence, and the final set of garden tools is listed in description order.

Author: Stephen Withrow

Stephen has over 30 years' experience in training, development, and consulting in a variety of technology areas including Java, C, C++, XML, JavaScript, AJAX, Tomcat, JBoss, Oracle, and DB2. His background includes design and implementation of business solutions on client/server, Web, and enterprise platforms. Stephen is a published writer in both technical and non-technical endeavors. Stephen received an undergraduate degree in Computer Science and Physics from Florida State University.

Discuss