Comparable and Comparator Interfaces

You can sort a list of integers based on their natural ordering. You can compare two integers and see which one comes before the other in natural ordering. But how will you compare two objects and sort them in an order. You have two interfaces in Java Comparable and Comparator that will help us compare objects and sort them in an order.

 

Comparable interface

Comparable interface imposes ordering on the objects of each class that implements it. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method.

Lists and arrays of objects that implement this interface can be sorted by Collections.sort and Arrays.sort, respectively.

Objects that implement Comparable interface can be used as keys in a sorted map or as elements in a sorted set, without the need to specify a comparator.

Comparable interface has one method compareTo(T o) that compares this object with the specified object for order.

The compareTo method returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

 

Comparable and equals method

It is strongly recommended that natural orderings be consistent with equals:

  • The natural ordering for a class C is said to be consistent with equals if and only if e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2) for every e1 and e2 of class C.

  • However, null is not an instance of any class, and e.compareTo(null) should throw a NullPointerException even though e.equals(null) returns false.

 

Comparator interface

Comparator interface imposes ordering on some collection of objects.

Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) along with the collection.

Comparator interface has one method compare(T o1, T o2) that compares its two arguments for order.

The compare method returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

 

Comparator and equals method

It is strongly recommended that natural orderings be consistent with equals:

  • The natural ordering for a class C is said to be consistent with equals if and only if e1.compareTo(e2) == 0 has the same boolean value as e1.equals(e2) for every e1 and e2 of class C.

  • Unlike Comparable, a comparator may optionally permit comparison of null arguments, while maintaining the requirements for an equivalence relation.

 

Comparator vs. Comparable

  1. Unlike Comparable, your class need not implement Comparator. So your class is untouched.

  2. Unlike Comparable, where you can sort only based on one field (or one set of fields) in one particular way, you can have different comparators for different fields (or different set of fields) with different set of conditions.

  3. Unlike Comparable, a comparator may optionally permit comparison of null arguments, while maintaining the requirements for an equivalence relation.

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)