Sitemap

Java Object Sorting Explained: Using Comparable and Comparator

3 min readOct 21, 2023

--

Comparable vs Comparator | The Code Bean
Comparable vs Comparator | The Code Bean

In Java, sorting is the most common operation, and sometimes we need to sort objects based on custom criteria (classes). Two interfaces, Comparable and Comparator, provide the means to achieve this. In this blog post, we'll explore how to use Comparable and Comparator to sort objects in Java.

Understanding Comparable:

  • The Comparable interface is used for defining a natural ordering of objects. It allows you to specify how instances of a class should be compared to each other by implementing the compareTo method.
  • Objects that implement Comparable can be compared and sorted using methods like Collections.sort() or Arrays.sort().
  • The compareTo method returns a negative integer if the current object is less than the other, zero if they are equal, and a positive integer if the current object is greater.
  • An example of using Comparable is sorting a list of strings alphabetically or a list of integers numerically.

Implement Comparable in Your Class:

To define the natural order of objects, you must implement the Comparable interface and override the compareTo method within your class.

import java.util.*;

public class Book implements Comparable<Book> {
private String title;
private int year;

public Book(String title, int year) {
this.title = title;
this.year = year;
}

@Override
public int compareTo(Book other) {
// Compare books based on their publication year
return Integer.compare(this.year, other.year);
}

// Additional methods and getters...
}

Sorting with Comparable:

Once Comparable is implemented, you can easily sort a list of objects of that class using built-in methods like Collections.sort().

public static void main(String[] args) {
List<Book> library = new ArrayList<>();
library.add(new Book("Java Programming", 2019));
library.add(new Book("Algorithms Unleashed", 2022));
library.add(new Book("Data Structures Explained", 2017));

// Sort the list of books based on the natural order (year)
Collections.sort(library);

for (Book book : library) {
System.out.println(book.getTitle());
}
}

Understanding Comparator:

  • The Comparator interface is used for defining custom ordering or comparison logic for objects when the natural ordering (defined by Comparable) is not appropriate or needs to be overridden.
  • It allows you to define multiple ways to compare objects, making it flexible for different sorting or comparison needs.
  • The compare method in a Comparator takes two objects as arguments and returns a negative integer, zero, or a positive integer based on the comparison result.
  • You can use Comparator instances to sort objects, search for specific objects in a list, or define custom sorting orders without modifying the object classes themselves.

Create a Custom Comparator:

To create a custom sorting logic, implement the Comparator interface and override the compare method.

import java.util.*;

public class TitleComparator implements Comparator<Book> {
@Override
public int compare(Book b1, Book b2) {
// Compare books based on their titles
return b1.getTitle().compareTo(b2.getTitle());
}
}

Sorting with Comparator:

When sorting objects using a custom Comparator, you specify the sorting order explicitly.

public static void main(String[] args) {
List<Book> library = new ArrayList<>();
library.add(new Book("Java Programming", 2019));
library.add(new Book("Algorithms Unleashed", 2022));
library.add(new Book("Data Structures Explained", 2017));

// Sort the list of books based on the title using the TitleComparator
Collections.sort(library, new TitleComparator());

for (Book book : library) {
System.out.println(book.getTitle() + " (" + book.getYear() + ")");
}
}

Conclusion:

In Java, you can control how objects are sorted by implementing the Comparable interface for natural ordering or by using Comparator for custom ordering. These tools are essential for sorting and searching operations, making your Java applications more versatile and flexible.

--

--

The Code Bean
The Code Bean

Written by The Code Bean

Tech enthusiasts community sharing knowledge on coding, software design, and web development. 🚀

No responses yet