Comparable
The Comparable
interface is used to define how a class is to be sorted. It is not to be confused with the Comparator
interface, which is implemented in a separate class. The Comparable
interface is implemented in the class to be sorted.
Syntax
class MyClass implements Comparable<MyClass> {
// Class body.
...
@Override public int compareTo(MyClass value)
{
// Comparison Logic
...
return result;
}
}
Applying the Comparable
interface to MyClass
requires the implements
keyword (e.g., Comparable<MyClass>
). This interface has a single .compareTo()
method that returns an int
value based on whether the value
of a current class instance (referenced by this
) can be logically sorted with the value of another instance of the same class. The compareTo
method should follow the contract defined by the Comparable
interface. The comparison logic should be consistent with the equals method (i.e., if compareTo
returns 0
, equals should return true).
Return Value | Meaning |
---|---|
>= 1 |
this instance > passed instance |
0 |
this instance = passed instance |
<= -1 |
this instance < passed instance |
This method determines how items are sorted by methods such as Arrays.sort()
and Collections.sort()
.
Example
The following example defines an Employee
class that sorts based on lastName
and then on firstName
.
Implementing the class:
import java.util.*;// Employee.javapublic class Employee implements Comparable<Employee> {String firstName;String lastName;// Constructor sets firstName and lastNamepublic Employee(String first, String last){this.firstName = first;this.lastName = last;}// User-friendly output when printed.public String toString(){return "( " + lastName + ", " + firstName + " )";}// Implement the Comparable interface@Override public int compareTo(Employee value){if (this.lastName.compareTo(value.lastName) != 0) {// If lastNames are different, compare lastNamereturn this.lastName.compareTo(value.lastName);} else {// If lastNames are the same, compare firstNamereturn this.firstName.compareTo(value.firstName);}}}
This last snippet demonstrates the Comparable
interface:
import java.util.*;// SortExample.javapublic class SortExample {public static void main(String[] args){// Set up array with a few Employee classesEmployee a[] = new Employee[5];a[0] = new Employee("Kirk","Douglas");a[1] = new Employee("Mel","Brooks");a[2] = new Employee("Jane","Fonda");a[3] = new Employee("Henry","Fonda");a[4] = new Employee("Michael","Douglas");// The .sort() method uses the Comparable interface.Arrays.sort(a);// Print out the sorted Employeesfor (int i=0; i < a.length; i++) {System.out.println(a[i]);}}}
This example results in the following output:
( Brooks, Mel )( Douglas, Kirk )( Douglas, Michael )( Fonda, Henry )( Fonda, Jane )
Contribute to Docs
- Learn more about how to get involved.
- Edit this page on GitHub to fix an error or make an improvement.
- Submit feedback to let us know how we can improve Docs.
Learn Java on Codecademy
- Career path
Computer Science
Looking for an introduction to the theory behind programming? Master Python while learning data structures, algorithms, and more!Includes 6 CoursesWith Professional CertificationBeginner Friendly75 hours - Free course
Learn Java
Learn to code in Java — a robust programming language used to create software, web and mobile apps, and more.Beginner Friendly17 hours