How Does Java’s Comparable Interface Work?

The Comparable interface in Java defines the natural ordering of objects, allowing them to be sorted automatically. Visit compare.edu.vn to explore detailed comparisons of various Java sorting techniques. This facilitates efficient data organization, improves code readability, and ensures consistent sorting behavior across different implementations. Understand the benefits of Implements Comparable for optimized data structures and algorithms.

1. What Is the Java Comparable Interface?

The Comparable interface in Java is a fundamental part of the java.lang package, designed to establish a natural order for objects of a class. When a class implements comparable, it gains the ability to define how its instances should be compared to one another. This is achieved through the implementation of the compareTo() method.

The primary purpose of the Comparable interface is to enable the sorting of objects using methods like Arrays.sort() or within sorted collections such as TreeSet and TreeMap. By providing a consistent and reliable way to compare objects, Comparable ensures that these sorting mechanisms can arrange objects in a predictable and meaningful order. This is crucial for various applications, from organizing data in a user interface to optimizing search algorithms.

The compareTo() method is the heart of the Comparable interface. It dictates the comparison logic between two objects of the same class. The method returns an integer value that indicates the relative order of the objects being compared.

  • A negative value indicates that the current object is less than the specified object.
  • Zero indicates that the current object is equal to the specified object.
  • A positive value indicates that the current object is greater than the specified object.

By adhering to this contract, classes that implements comparable can seamlessly integrate with Java’s sorting and searching utilities, providing a standardized way to handle object ordering.

2. Why Use the Comparable Interface?

Using the Comparable interface offers several key advantages in Java programming, especially when dealing with object sorting and data organization. Here are the primary reasons to implements comparable in your classes:

  • Enables Natural Ordering: The most significant benefit is defining a natural order for objects. This allows instances of a class to be sorted in a way that makes sense for the domain. For example, if you have a Student class, you might want to sort students by their ID, GPA, or name. Comparable provides a standardized way to specify this ordering.

  • Integration with Sorting Methods: Java’s built-in sorting methods, such as Arrays.sort() and Collections.sort(), can automatically sort collections of objects that implements comparable. This simplifies the sorting process, as you don’t need to provide a custom Comparator each time you want to sort the objects.

  • Use with Sorted Collections: Classes that implements comparable can be directly used with sorted collections like TreeSet and TreeMap. These collections maintain elements in a sorted order based on the compareTo() method, ensuring that the elements are always organized according to the defined natural order.

  • Code Reusability and Consistency: By defining the comparison logic within the class itself, you promote code reusability. The sorting behavior is encapsulated within the class, ensuring consistency across different parts of your application.

  • Simplified Data Organization: Comparable makes it easier to organize data in a meaningful way. Whether you’re displaying data in a user interface or processing data in an algorithm, having a defined natural order ensures that the data is presented and handled in a consistent and logical manner.

  • Improved Performance: Sorted collections and sorting algorithms can leverage the natural order defined by Comparable to optimize performance. For example, binary search algorithms can efficiently locate elements in a sorted collection.

  • Standardized Approach: Using Comparable provides a standardized approach to object comparison, making your code more readable and maintainable. Other developers can quickly understand how objects are being compared and sorted.

3. How to Implements Comparable in Java

To implements comparable in Java, follow these steps to define a natural ordering for your class’s objects.

Step 1: Declare the Class

First, declare your class and specify that it implements comparable. You’ll need to use the generic type Comparable<YourClass> to indicate that you’re comparing instances of your class.

public class Student implements Comparable<Student> {
    // Class members (fields, constructor, etc.)
}

Step 2: Implement the compareTo() Method

Next, implements comparable requires you to provide an implementation for the compareTo() method. This method takes an object of the same class as an argument and returns an integer indicating the relative order of the two objects.

@Override
public int compareTo(Student other) {
    // Comparison logic
}

Step 3: Define the Comparison Logic

Inside the compareTo() method, define the logic for comparing the objects. This typically involves comparing one or more fields of the objects. Here are some common scenarios:

  • Comparing Numeric Fields: If you’re comparing numeric fields (e.g., integers, doubles), you can simply subtract one field from the other.

    @Override
    public int compareTo(Student other) {
        return this.studentId - other.studentId; // Ascending order
    }
  • Comparing String Fields: For string fields, you can use the compareTo() method of the String class.

    @Override
    public int compareTo(Student other) {
        return this.name.compareTo(other.name); // Lexicographical order
    }
  • Comparing Multiple Fields: If you need to compare multiple fields, you can chain the comparisons.

    @Override
    public int compareTo(Student other) {
        int nameComparison = this.name.compareTo(other.name);
        if (nameComparison != 0) {
            return nameComparison;
        }
        return this.studentId - other.studentId; // If names are equal, compare by ID
    }

Step 4: Handle Null Values (Optional)

If your fields can be null, you should handle null values appropriately to avoid NullPointerException errors. A common approach is to treat null as either the smallest or largest possible value.

@Override
public int compareTo(Student other) {
    if (this.name == null && other.name == null) {
        return 0; // Both names are null, so they are equal
    } else if (this.name == null) {
        return -1; // Null name is considered smaller
    } else if (other.name == null) {
        return 1; // Null name is considered smaller
    }
    return this.name.compareTo(other.name);
}

Step 5: Ensure Consistency with equals() (Recommended)

It’s highly recommended that your compareTo() method is consistent with your equals() method. This means that if obj1.equals(obj2) is true, then obj1.compareTo(obj2) should return 0. This ensures that your objects behave consistently in both sorted and unsorted collections.

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    Student student = (Student) obj;
    return studentId == student.studentId && Objects.equals(name, student.name);
}

@Override
public int hashCode() {
    return Objects.hash(studentId, name);
}

@Override
public int compareTo(Student other) {
    if (this.equals(other)) return 0;
    int nameComparison = this.name.compareTo(other.name);
    if (nameComparison != 0) {
        return nameComparison;
    }
    return this.studentId - other.studentId;
}

Example:

Here’s a complete example demonstrating how to implements comparable in a Student class:

import java.util.Objects;

public class Student implements Comparable<Student> {
    private int studentId;
    private String name;

    public Student(int studentId, String name) {
        this.studentId = studentId;
        this.name = name;
    }

    public int getStudentId() {
        return studentId;
    }

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Student student = (Student) obj;
        return studentId == student.studentId && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(studentId, name);
    }

    @Override
    public int compareTo(Student other) {
        int nameComparison = this.name.compareTo(other.name);
        if (nameComparison != 0) {
            return nameComparison;
        }
        return this.studentId - other.studentId;
    }

    @Override
    public String toString() {
        return "Student{" +
               "studentId=" + studentId +
               ", name='" + name + ''' +
               '}';
    }

    public static void main(String[] args) {
        Student[] students = {
            new Student(102, "Alice"),
            new Student(101, "Bob"),
            new Student(103, "Alice")
        };

        Arrays.sort(students);

        for (Student student : students) {
            System.out.println(student);
        }
    }
}

In this example, the Student class implements comparable and defines a natural order based on the student’s name and ID. The compareTo() method first compares the names and, if they are equal, compares the student IDs.

4. Comparable Interface Syntax

The syntax for the Comparable interface in Java is straightforward. It involves declaring that a class implements comparable and providing an implementation for the compareTo() method. Here’s a breakdown of the syntax:

1. Interface Declaration:

The Comparable interface is part of the java.lang package, so you don’t need to import it explicitly. To use it, you declare that your class implements comparable with the appropriate generic type.

public class MyClass implements Comparable<MyClass> {
    // Class members
}

Here, MyClass is the class that is implements comparable, and <MyClass> specifies that it is comparable to instances of itself.

2. compareTo() Method:

The Comparable interface contains a single method, compareTo(), which must be implemented by the class. The syntax for the compareTo() method is as follows:

@Override
public int compareTo(MyClass other) {
    // Comparison logic
}
  • @Override: This annotation indicates that you are overriding a method from a superclass or interface. It’s good practice to include it to ensure that you’re correctly implementing the method.
  • public int compareTo(MyClass other): This is the method signature. It takes an object of the same class (MyClass) as an argument and returns an integer.
  • MyClass other: This is the object to which the current object is being compared.
  • // Comparison logic: This is where you implement the logic to determine the relative order of the two objects.

3. Return Value of compareTo():

The compareTo() method must return an integer value based on the comparison:

  • Negative value: If the current object is less than the other object.
  • Zero: If the current object is equal to the other object.
  • Positive value: If the current object is greater than the other object.
@Override
public int compareTo(MyClass other) {
    if (this.value < other.value) {
        return -1; // Current object is less than the other
    } else if (this.value > other.value) {
        return 1; // Current object is greater than the other
    } else {
        return 0; // Current object is equal to the other
    }
}

4. Full Example:

Here’s a complete example demonstrating the syntax of the Comparable interface:

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

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

    public String getTitle() {
        return title;
    }

    public String getAuthor() {
        return author;
    }

    public int getPublicationYear() {
        return publicationYear;
    }

    @Override
    public int compareTo(Book other) {
        // Compare by publication year
        if (this.publicationYear < other.publicationYear) {
            return -1;
        } else if (this.publicationYear > other.publicationYear) {
            return 1;
        } else {
            // If publication years are the same, compare by title
            return this.title.compareTo(other.title);
        }
    }

    @Override
    public String toString() {
        return "Book{" +
               "title='" + title + ''' +
               ", author='" + author + ''' +
               ", publicationYear=" + publicationYear +
               '}';
    }

    public static void main(String[] args) {
        Book book1 = new Book("The Great Gatsby", "F. Scott Fitzgerald", 1925);
        Book book2 = new Book("To Kill a Mockingbird", "Harper Lee", 1960);
        Book book3 = new Book("1984", "George Orwell", 1949);

        System.out.println(book1.compareTo(book2)); // Output: -1 (book1 is older)
        System.out.println(book2.compareTo(book3)); // Output: 1 (book2 is newer)
        System.out.println(book1.compareTo(new Book("The Great Gatsby", "F. Scott Fitzgerald", 1925))); // Output: 0 (books are equal)
    }
}

In this example, the Book class implements comparable and compares books first by their publication year and then by their title.

5. Examples of Using Comparable in Java

Here are several examples illustrating how to use the Comparable interface in Java with different classes and comparison criteria.

Example 1: Sorting Integers

This example demonstrates sorting a list of custom Number objects using the Comparable interface.

import java.util.Arrays;

class Number implements Comparable<Number> {
    int v; // Value of the number

    // Constructor
    public Number(int v) {
        this.v = v;
    }

    // toString() for displaying the number
    @Override
    public String toString() {
        return String.valueOf(v);
    }

    // compareTo() method to define sorting logic
    @Override
    public int compareTo(Number o) {
        // Ascending order
        return this.v - o.v;
    }

    public static void main(String[] args) {
        // Create an array of Number objects
        Number[] n = {new Number(4), new Number(1), new Number(7), new Number(2)};

        System.out.println("Before Sorting: " + Arrays.toString(n));

        // Sort the array
        Arrays.sort(n);

        // Display numbers after sorting
        System.out.println("After Sorting: " + Arrays.toString(n));
    }
}

Explanation:

  • The Number class implements comparable<Number>.
  • The compareTo() method compares the integer values of two Number objects.
  • The Arrays.sort() method is used to sort the array of Number objects in ascending order.

Output:

Before Sorting: [4, 1, 7, 2]
After Sorting: [1, 2, 4, 7]

Example 2: Sorting Strings

This example shows how to sort a list of String objects using the Comparable interface (which is already implemented by the String class).

import java.util.Arrays;

public class StringSortExample {
    public static void main(String[] args) {
        String[] names = {"Charlie", "Alice", "Bob", "David"};

        System.out.println("Before Sorting: " + Arrays.toString(names));

        Arrays.sort(names);

        System.out.println("After Sorting: " + Arrays.toString(names));
    }
}

Explanation:

  • The String class already implements comparable<String>.
  • The Arrays.sort() method is used to sort the array of String objects in lexicographical order.

Output:

Before Sorting: [Charlie, Alice, Bob, David]
After Sorting: [Alice, Bob, Charlie, David]

Example 3: Sorting Custom Objects (Employees)

This example demonstrates sorting a list of custom Employee objects by their salary.

import java.util.Arrays;

class Employee implements Comparable<Employee> {
    private int id;
    private String name;
    private double salary;

    public Employee(int id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    @Override
    public int compareTo(Employee other) {
        // Compare by salary
        if (this.salary < other.salary) {
            return -1;
        } else if (this.salary > other.salary) {
            return 1;
        } else {
            return 0;
        }
    }

    @Override
    public String toString() {
        return "Employee{" +
               "id=" + id +
               ", name='" + name + ''' +
               ", salary=" + salary +
               '}';
    }

    public static void main(String[] args) {
        Employee[] employees = {
            new Employee(101, "Alice", 50000.0),
            new Employee(102, "Bob", 60000.0),
            new Employee(103, "Charlie", 55000.0)
        };

        System.out.println("Before Sorting: " + Arrays.toString(employees));

        Arrays.sort(employees);

        System.out.println("After Sorting: " + Arrays.toString(employees));
    }
}

Explanation:

  • The Employee class implements comparable<Employee>.
  • The compareTo() method compares the salaries of two Employee objects.
  • The Arrays.sort() method is used to sort the array of Employee objects in ascending order of salary.

Output:

Before Sorting: [Employee{id=101, name='Alice', salary=50000.0}, Employee{id=102, name='Bob', salary=60000.0}, Employee{id=103, name='Charlie', salary=55000.0}]
After Sorting: [Employee{id=101, name='Alice', salary=50000.0}, Employee{id=103, name='Charlie', salary=55000.0}, Employee{id=102, name='Bob', salary=60000.0}]

Example 4: Sorting Dates

This example demonstrates sorting a list of Date objects using the Comparable interface (which is already implemented by the Date class).

import java.util.Arrays;
import java.util.Date;
import java.util.Calendar;

public class DateSortExample {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.set(2023, 0, 1); // January 1, 2023
        Date date1 = cal.getTime();

        cal.set(2023, 0, 15); // January 15, 2023
        Date date2 = cal.getTime();

        cal.set(2022, 11, 31); // December 31, 2022
        Date date3 = cal.getTime();

        Date[] dates = {date1, date2, date3};

        System.out.println("Before Sorting: " + Arrays.toString(dates));

        Arrays.sort(dates);

        System.out.println("After Sorting: " + Arrays.toString(dates));
    }
}

Explanation:

  • The Date class already implements comparable<Date>.
  • The Arrays.sort() method is used to sort the array of Date objects in chronological order.

Output:

Before Sorting: [Sun Jan 01 00:00:00 GMT 2023, Sun Jan 15 00:00:00 GMT 2023, Sat Dec 31 00:00:00 GMT 2022]
After Sorting: [Sat Dec 31 00:00:00 GMT 2022, Sun Jan 01 00:00:00 GMT 2023, Sun Jan 15 00:00:00 GMT 2023]

Example 5: Sorting Pairs with Multiple Criteria

This example demonstrates sorting a list of custom Pair objects based on two criteria: first by string (lexicographical order) and then by integer value.

import java.util.Arrays;

class Pair implements Comparable<Pair> {
    String s; // String
    int v; // Integer

    // Constructor
    public Pair(String s, int v) {
        this.s = s;
        this.v = v;
    }

    // toString() method for displaying the Pair
    @Override
    public String toString() {
        return "(" + s + ", " + v + ")";
    }

    // compareTo() method for comparison logic
    @Override
    public int compareTo(Pair p) {
        // Compare based on the string field (lexicographical order)
        if (!this.s.equals(p.s)) {
            return this.s.compareTo(p.s);
        }

        // If strings are the same, compare based on the integer value
        return this.v - p.v;
    }

    public static void main(String[] args) {
        // Create an array of Pair objects
        Pair[] p = {
            new Pair("abc", 3),
            new Pair("a", 4),
            new Pair("bc", 5),
            new Pair("a", 2)
        };

        System.out.println("Before Sorting:");
        for (Pair p1 : p) {
            System.out.println(p1);
        }

        // Sort the array of pairs
        Arrays.sort(p);

        System.out.println("nAfter Sorting:");
        for (Pair p1 : p) {
            System.out.println(p1);
        }
    }
}

Explanation:

  • The Pair class implements comparable<Pair>.
  • The compareTo() method first compares the string fields. If the strings are different, it returns the result of the string comparison.
  • If the strings are the same, it compares the integer values.
  • The Arrays.sort() method is used to sort the array of Pair objects based on the defined comparison logic.

Output:

Before Sorting:
(abc, 3)
(a, 4)
(bc, 5)
(a, 2)

After Sorting:
(a, 2)
(a, 4)
(abc, 3)
(bc, 5)

Example 6: Sorting First and Last Names

This example demonstrates sorting a list of NamePair objects based on first and last names.

import java.util.Arrays;

class NamePair implements Comparable<NamePair> {
    String f; // First name
    String l; // Last name

    // Constructor
    public NamePair(String f, String l) {
        this.f = f;
        this.l = l;
    }

    // toString() method for displaying the Pair
    @Override
    public String toString() {
        return "(" + f + ", " + l + ")";
    }

    // compareTo method for comparison logic
    @Override
    public int compareTo(NamePair p) {
        // Compare based on the first name (lexicographical order)
        if (!this.f.equals(p.f)) {
            return this.f.compareTo(p.f);
        }

        // If first names are the same, compare based on the last name
        return this.l.compareTo(p.l);
    }

    public static void main(String[] args) {
        // Create an array of Pair objects
        NamePair[] p = {
            new NamePair("raj", "kashup"),
            new NamePair("rahul", "singh"),
            new NamePair("reshmi", "dubey"),
        };

        System.out.println("Before Sorting:");
        for (NamePair p1 : p) {
            System.out.println(p1);
        }

        // Sort the array of pairs
        Arrays.sort(p);

        System.out.println("nAfter Sorting:");
        for (NamePair p1 : p) {
            System.out.println(p1);
        }
    }
}

Explanation:

  • The NamePair class implements comparable<NamePair>.
  • The compareTo() method first compares the first names. If the first names are different, it returns the result of the first name comparison.
  • If the first names are the same, it compares the last names.
  • The Arrays.sort() method is used to sort the array of NamePair objects based on the defined comparison logic.

Output:

Before Sorting:
(raj, kashup)
(rahul, singh)
(reshmi, dubey)

After Sorting:
(rahul, singh)
(raj, kashup)
(reshmi, dubey)

6. Implementing compareTo() Method

The compareTo() method is the heart of the Comparable interface in Java. It defines the natural ordering of objects for a class that implements comparable. Here’s a detailed guide on how to implements comparable and implement the compareTo() method effectively.

1. Method Signature:

The compareTo() method has the following signature:

@Override
public int compareTo(YourClass other) {
    // Comparison logic
}
  • @Override: This annotation indicates that you are overriding a method from a superclass or interface.
  • public int compareTo(YourClass other): This is the method signature. It takes an object of the same class (YourClass) as an argument and returns an integer.
  • YourClass other: This is the object to which the current object is being compared.

2. Comparison Logic:

Inside the compareTo() method, you need to define the logic for comparing the current object with the other object. The comparison logic should adhere to the following rules:

  • If the current object is less than the other object, return a negative integer.
  • If the current object is equal to the other object, return zero.
  • If the current object is greater than the other object, return a positive integer.

Here are some common scenarios and techniques for implementing the comparison logic:

  • Comparing Numeric Fields:

    For numeric fields (e.g., int, double, float), you can use subtraction or comparison operators.

    public class Product implements Comparable<Product> {
        private int productId;
        private double price;
    
        // Constructor, getters, etc.
    
        @Override
        public int compareTo(Product other) {
            // Compare by price
            if (this.price < other.price) {
                return -1;
            } else if (this.price > other.price) {
                return 1;
            } else {
                // If prices are equal, compare by productId
                return this.productId - other.productId;
            }
        }
    }

    In this example, the Product class implements comparable and compares products first by price and then by productId.

  • Comparing String Fields:

    For string fields, you can use the compareTo() method of the String class.

    public class Student implements Comparable<Student> {
        private String name;
        private int studentId;
    
        // Constructor, getters, etc.
    
        @Override
        public int compareTo(Student other) {
            // Compare by name
            int nameComparison = this.name.compareTo(other.name);
            if (nameComparison != 0) {
                return nameComparison;
            } else {
                // If names are equal, compare by studentId
                return this.studentId - other.studentId;
            }
        }
    }

    In this example, the Student class implements comparable and compares students first by name and then by studentId.

  • Comparing Dates:

    For date fields, you can use the compareTo() method of the Date class or the java.time API.

    import java.time.LocalDate;
    
    public class Event implements Comparable<Event> {
        private LocalDate eventDate;
        private String eventName;
    
        // Constructor, getters, etc.
    
        @Override
        public int compareTo(Event other) {
            // Compare by eventDate
            int dateComparison = this.eventDate.compareTo(other.eventDate);
            if (dateComparison != 0) {
                return dateComparison;
            } else {
                // If dates are equal, compare by eventName
                return this.eventName.compareTo(other.eventName);
            }
        }
    }

    In this example, the Event class implements comparable and compares events first by date and then by name.

  • Handling Null Values:

    If your fields can be null, you should handle null values appropriately to avoid NullPointerException errors. A common approach is to treat null as either the smallest or largest possible value.

    public class Employee implements Comparable<Employee> {
        private String name;
        private Integer employeeId;
    
        // Constructor, getters, etc.
    
        @Override
        public int compareTo(Employee other) {
            // Handle null names
            if (this.name == null && other.name == null) {
                // Both names are null, so they are equal
                return 0;
            } else if (this.name == null) {
                // Null name is considered smaller
                return -1;
            } else if (other.name == null) {
                // Null name is considered smaller
                return 1;
            }
    
            // Compare by name
            int nameComparison = this.name.compareTo(other.name);
            if (nameComparison != 0) {
                return nameComparison;
            } else {
                // If names are equal, compare by employeeId
                if (this.employeeId == null && other.employeeId == null) {
                    return 0;
                } else if (this.employeeId == null) {
                    return -1;
                } else if (other.employeeId == null) {
                    return 1;
                } else {
                    return this.employeeId.compareTo(other.employeeId);
                }
            }
        }
    }

    In this example, the Employee class implements comparable and handles null values for both the name and employeeId fields.

3. Consistency with equals():

It’s highly recommended that your compareTo() method is consistent with your equals() method. This means that if obj1.equals(obj2) is true, then obj1.compareTo(obj2) should return 0. This ensures that your objects behave consistently in both sorted and unsorted collections.

import java.util.Objects;

public class Product implements Comparable<Product> {
    private int productId;
    private String name;
    private double price;

    // Constructor, getters, etc.

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Product product = (Product) obj;
        return productId == product.productId;
    }

    @Override
    public int hashCode() {
        return Objects.hash(productId);
    }

    @Override
    public int compareTo(Product other) {
        if (this.equals(other)) {
            return 0;
        }
        // Compare by price
        if (this.price < other.price) {
            return -1;
        } else if (this.price > other.price) {
            return 1;
        } else {
            // If prices are equal, compare by name
            return this.name.compareTo(other.name);
        }
    }
}

In this example, the Product class implements comparable and ensures that the compareTo() method is consistent with the equals() method.

7. Comparable vs. Comparator

Both Comparable and Comparator are interfaces in Java used for sorting objects, but they serve different purposes and are used in different scenarios. Understanding the differences between them is crucial for effective object sorting.

Comparable:

  • Purpose: Comparable is used to define the natural ordering of objects within a class. It allows a class to specify how its instances should be compared to each other.

  • Interface: The Comparable interface is part of the java.lang package and contains a single method, compareTo().

  • Implementation: To use Comparable, a class implements comparable and provides an implementation for the compareTo() method.

  • Usage: Comparable is typically used when you want to define a default or natural way to sort objects of a class. This is useful when the sorting criteria are inherent to the object itself.

  • Limitation: Comparable allows only one sorting order to be defined for a class.

  • Example:

    
    public class Book implements Comparable<Book> {
        private String title;
        private String author;
        private int publicationYear;
    
        // Constructor, getters, etc.
    
        @Override
        public int compareTo(Book other) {
            // Compare by publication year

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

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