Comparable vs Comparator: Difference Between Comparable and Comparator

Comparable and Comparator: An Overview

Comparable and comparator are both interfaces in the Java programming language to determine the behaviour in which classes will be implemented. While Comparable is used on objects that are naturally ordered, the Comparator interface implements sorting by taking the attributes of an object into consideration. Further, Comparator sorting takes into account objects of two different classes and Comparable compares objects using the “this” reference. 

Now, that we have established the basic principle on which both interfaces work, let’s look at the differences between the two.

Difference Between Comparable and Comparator

Method of Sorting


It uses the compareTo() function for sorting. This is the only method present in the Comparable sorting interface. 

compareTo(Object O) takes as argument an object and compares it to another of the same type. If an object is a string, you can only compare it to another object of the same type. The same is the case with an int object and so on. compareTo() returns a negative, positive or zero integer value based on the result of the sorting. 


There are two methods to sort elements in Comparator: compare() and equals(). 

compare(Object O1, Object O2) takes into account two arguments as input and provides the desired output. It returns an integer to indicate how the first argument comares with the second. 

  • If O1 is less than O2, it returns a negative integer.
  • If O1 is greater than O2, it will return a positive integer.
  • If O1 is equal to O2, it returns 0.

equals(Object) takes into account an object as input and compares it to the comparator. It returns True if the Object is equal to the Comparator. It also ensures that the order does not change. 

Package Used


It exists in the java.lang package of Java. 


It exists in the java.util package of Java.

Ordering and Class


  • It takes into account objects that follow natural ordering i.e. have a tendency to sort themselves. For example, alphabetical order or numerical order in case of names, price, salary, roll number, age, etc. 
  • It is also important that both objects belong to the same class.
  • Comparable interface compares “this” reference with the object specified. 
  • Sorting using Comparable affects the actual class. 


  • This interface is used primarily to sort attributes of specified objects. They do not need to have a natural order; it can be customised. 
  • The logic of sorting is required to be in separate classes to compare the attributes of the objects of the two classes in consideration.
  • The actual class remains unaffected.

Sequences and Collections


  • It supports single sorting sequences only. This implies that you can only consider one element or attribute of a collection such as a roll number or age or rank.
  • For sorting a collection of objects, arrays or list, you can use Collection. sort(List) or Arrays. sort(List). This will bring the objects in their natural order.


  • It supports multiple sorting sequences. This implies that you can consider multiple elements or attributes of a collection such as a roll number, age and rank.
  • You can use a collection.sort(list, comparator) to sort a collection.

Here is a summary of all the differences  between Comparable and Comparator

Comparable Comparator
Java.lang Java.util
Method of Sorting
compareTo() compare()
Natural Ordering Custom Ordering
Type of Object
Objects in comparison must be of the same type Objects of different classes are considered
Affect on Class
Class gets modified Doesn’t affect the class
Sorting Sequence
Single Sorting Sequence Multiple Sorting Sequence

Enroll in Software development Courses from the World’s top Universities. Earn Executive PG Programs, Advanced Certificate Programs, or Masters Programs to fast-track your career.

Things To Keep In Mind While Using Comparable And Comparator In Java

  • Comparable interface is the one to opt if you are selling to perform a standard comparison for a specific class.
  • Comparator allows the use of lambda. 
  • You can use the compareTo() method to implement both Comparator and Comparable.
  • Comparator interface is recommended if you are seeking flexibility in sorting


In most real-life scenarios, when we sort, we usually have a variety of parameters in mind. Also, since using comparable results in default sorting and can’t be changed dynamically, it is less practical than Comparator which allows you to customize and choose from different sorting methods to suit your requirement. For this reason alone, Comparator finds more practical applications than Comparable.

Read: Some interesting java project to check out

If you’re interested to learn more about Java, full stack development, check out upGrad & IIIT-B’s Executive PG Program in Full-stack Software Development which is designed for working professionals and offers 500+ hours of rigorous training, 9+ projects, and assignments, IIIT-B Alumni status, practical hands-on capstone projects & job assistance with top firms.

What are interfaces in programming languages?

Is learning Java easy?

Java introduces an Object-Oriented programming paradigm, allowing even the most inexperienced Java developers to think and create programs like an experienced developer. Java originated from the C and C++ programming languages that are also extensively used today. While Java has some similarities to C and C++ in terms of functionality, it has grown into a much more user-friendly language. Because object-oriented programming makes it simple to maintain and alter existing code, even novice coders may start working on corporate projects. New developers are less likely to encounter unforeseen runtime faults since Java is verified for errors before execution. Java compels programmers to correctly specify all code elements, reducing the chances of mistakes as applications grow.

Why is sorting necessary in Java?

Sorting refers to a set of techniques for rearranging the places of elements in an array such that they are all in ascending or descending order. A decent sorting algorithm must also ensure that elements with the same value remain in the sorted array in the same order. Sorting is required for understanding data structures and algorithms in depth. Java as a programming language is exceptionally versatile and can be used to implement a number of sorting algorithms. The majority of these algorithms are pretty versatile and may be implemented in both a recursive and iterative manner.

Want to share this article?

The best time to learn is now!

Leave a comment

Your email address will not be published. Required fields are marked *

Leave a comment

Your email address will not be published. Required fields are marked *

Get Free career counselling from upGrad experts!
Book a session with an industry professional today!
No Thanks
Let's do it
Get Free career counselling from upGrad experts!
Book a Session with an industry professional today!
Let's do it
No Thanks