Comparable interface

In this article, we will discuss Comparable interface with its only important method compareTo() in detail

String & wrapper classes’ implements comparable interface and provide default natural sorting-order

Comparable interface:

  • Comparable interface is used to order objects of each class that implements it
  • This is part of original collection framework introduced in Java 1.2 version
  • Present in java.lang package
  • Fully qualified name is java.lang.Comparable
  • Contains only one method compareTo() which returns integer value
  • Method signature:
    public int compareTo(Object obj);
  • String & wrapper classes’ like Integer, Double, etc implements Comparable interface and provides default natural sorting-order [DNSO]
  • We can reverse natural sorting-order by overriding compareTo() method and coding our own logic
  • Based on the integer value returned by compareTo(object2) method, elements are stored/sorted,
    1. returns negative integer, if object1 less than object2 (object1 < object2)
    2. returns positive integer, if object1 greater than object2 (object1 > object2)
    3. returns Zero (0), if object1 is equal to object2 (object1 == object2)
  • Collection classes like TreeSet & TreeMap uses compareTo() method to sort elements before storing

Example on Comparable interface:

  • Customer POJO with 2 member variables of Integer and String type
  • which implements Comparable interface
  • to provide natural ordering of Customer objects on the basis of customer name

public class Customer implements Comparable<Customer> {

	// member variables
	int customerId;
	String customerName;

	// 2-arg parameterized constructor
	public Customer(int customerId, String customerName) {
		this.customerId = customerId;
		this.customerName = customerName;

	// override toString() method
	public String toString() {
		return "Customer ["
				+ "customerId=" + customerId 
				+ ", customerName=" + customerName 
				+ "]";

	// override compareTo() method
	public int compareTo(Customer o) {
		return this.customerName.compareTo(o.customerName);

Main class

  • This class uses above customer POJO to store objects inside TreeSet
  • prints customer objects in ascending sorting-order of customer name


import java.util.TreeSet;

public class CustomerNatrualOrder {

	// main() method
	public static void main(String[] args) {

		// creating TreeSet object of type String
		TreeSet<Customer> ts = new TreeSet<Customer>();

		// adding elements to TreeSet object
		ts.add(new Customer(101, "Sundar Pichai"));
		ts.add(new Customer(107, "Satya Nadella"));
		ts.add(new Customer(103, "Shiv Nadar"));
		ts.add(new Customer(102, "Shantanu Narayen"));
		ts.add(new Customer(104, "Francisco D’Souza"));
		ts.add(new Customer(106, "Vishal Sikka"));
		ts.add(new Customer(105, "Chanda Kochhar"));

		System.out.println("Natural ordering of Customer Name\n");

		// natural ordering of customer name
		for(Customer cust : ts){
			System.out.println(cust.customerId + "  " 
					+ cust.customerName);


Natural ordering of Customer Name

105  Chanda Kochhar
104  Francisco D’Souza
107  Satya Nadella
102  Shantanu Narayen
103  Shiv Nadar
101  Sundar Pichai
106  Vishal Sikka




Happy Coding !!
Happy Learning !!

Comparator interface
HashSet v/s LinkedHashSet v/s TreeSet