in this tutorial, we will discuss java comparator and its examples.
What is Java Comparator?
Java Comparator is an interface for arranging Java objects. Summoned by “java.util.comparator,” Java Comparator analyzes two Java protests in a “compare(Object 01, Object 02)” group.
Utilizing configurable strategies, Java Comparator can contrast objects with profit a number based for a positive, equivalent or negative correlation. Since it isn’t constrained to looking at numbers, this can permit Java Comparator to be set up to request records one after another in order or numerically. With java.io.Serializable, Java comparator can likewise be utilized to effectively arrange serialized information structures.
Java Comparator is like the Comparable interface yet is expected for characterizing exchange sort orders where Comparable sorts by regular requesting, for example, lexicographic arranging.
Syntax
public int compare(Object obj1, Object obj2):
How to use Java Comparator?
Both TreeSet and TreeMap store components in the arranged request. Be that as it may, it is the comparator that characterizes unequivocally what arranged request implies.
The Comparator interface characterizes two techniques: compare( ) and equals( ). The compare( ) strategy, appeared, looks at two components for request −
The compare Method
int compare(Object obj1, Object obj2)
obj1 and obj2 are questioned be looked at. This strategy returns zero if the articles are equivalent. It restores positive esteem if obj1 is more noteworthy than obj2. Something else, negative esteem is returned.
By abrogating compare( ), you can modify how protests are requested. For instance, to sort backward request, you can make a comparator that switches the result of an examination.
![](/wp-content/uploads/2019/04/Java-Comparable-300x225.jpg)
The Equals Method
The equals( ) strategy, appeared, tests whether an article squares with the conjuring comparator −
boolean equals(Object obj)
obj is the article to be tried for fairness. The strategy returns genuine if obj and the summoning object are both Comparator articles and utilize a similar requesting. Else, it returns false.
Abrogating equals( ) is superfluous, and most straightforward comparators won’t do as such.
Java Comparator Example
class Dog implements Comparator<Dog>, Comparable<Dog> {
public String getDogName() {
// Overriding the compareTo method
public int compareTo(Dog d) {
return (this.name).compareTo(d.name);
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1) {
public static void main(String args[]) {
// Takes a list o Dog objects
List<Dog> list = new ArrayList<Dog>();
list.add(new Dog("Shaggy", 3));
list.add(new Dog("Lacy", 2));
list.add(new Dog("Roger", 10));
list.add(new Dog("Tommy", 4));
list.add(new Dog("Tammy", 1));
Collections.sort(list); // Sorts the array list
for(Dog a: list) // printing the sorted list of names
System.out.print(a.getDogName() + ", ");
// Sorts the array list using comparator
Collections.sort(list, new Dog());
for(Dog a: list) // printing the sorted list of ages
System.out.print(a.getDogName() +" : "+ a.getDogAge() + ", ");
import java.util.*;
class Dog implements Comparator<Dog>, Comparable<Dog> {
private String name;
private int age;
Dog() {
}
Dog(String n, int a) {
name = n;
age = a;
}
public String getDogName() {
return name;
}
public int getDogAge() {
return age;
}
// Overriding the compareTo method
public int compareTo(Dog d) {
return (this.name).compareTo(d.name);
}
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1) {
return d.age - d1.age;
}
}
public class Example {
public static void main(String args[]) {
// Takes a list o Dog objects
List<Dog> list = new ArrayList<Dog>();
list.add(new Dog("Shaggy", 3));
list.add(new Dog("Lacy", 2));
list.add(new Dog("Roger", 10));
list.add(new Dog("Tommy", 4));
list.add(new Dog("Tammy", 1));
Collections.sort(list); // Sorts the array list
for(Dog a: list) // printing the sorted list of names
System.out.print(a.getDogName() + ", ");
// Sorts the array list using comparator
Collections.sort(list, new Dog());
System.out.println(" ");
for(Dog a: list) // printing the sorted list of ages
System.out.print(a.getDogName() +" : "+ a.getDogAge() + ", ");
}
}
import java.util.*;
class Dog implements Comparator<Dog>, Comparable<Dog> {
private String name;
private int age;
Dog() {
}
Dog(String n, int a) {
name = n;
age = a;
}
public String getDogName() {
return name;
}
public int getDogAge() {
return age;
}
// Overriding the compareTo method
public int compareTo(Dog d) {
return (this.name).compareTo(d.name);
}
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1) {
return d.age - d1.age;
}
}
public class Example {
public static void main(String args[]) {
// Takes a list o Dog objects
List<Dog> list = new ArrayList<Dog>();
list.add(new Dog("Shaggy", 3));
list.add(new Dog("Lacy", 2));
list.add(new Dog("Roger", 10));
list.add(new Dog("Tommy", 4));
list.add(new Dog("Tammy", 1));
Collections.sort(list); // Sorts the array list
for(Dog a: list) // printing the sorted list of names
System.out.print(a.getDogName() + ", ");
// Sorts the array list using comparator
Collections.sort(list, new Dog());
System.out.println(" ");
for(Dog a: list) // printing the sorted list of ages
System.out.print(a.getDogName() +" : "+ a.getDogAge() + ", ");
}
}
OUTPUT:
Lacy, Roger, Shaggy, Tammy, Tommy,
Tammy : 1, Lacy : 2, Shaggy : 3, Tommy : 4, Roger : 10,
Working Examples of Java comparator.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Comparator;
// instance member variables
// parameterized constructor
public Student(String Name, Integer Age) {
public String getName() {
public void setName(String Name) {
public Integer getAge() {
public void setAge(Integer Age) {
// overriding toString() method
public String toString() {
return "Customer{" + "Name=" + Name + ", Age=" + Age + '}';
static class CustomerSortingComparator implements Comparator<Student> {
public int compare(Student customer1, Student customer2) {
int NameCompare = customer1.getName().compareTo(customer2.getName());
int AgeCompare = customer1.getAge().compareTo(customer2.getAge());
// 2-level comparison using if-else block
return ((AgeCompare == 0) ? NameCompare : AgeCompare);
public static void main(String[] args) {
// create ArrayList to store Student
List<Student> al = new ArrayList<>();
// create customer objects using constructor initialization
Student obj1 = new Student("Ajay", 27);
Student obj2 = new Student("Sneha", 23);
Student obj3 = new Student("Simran", 37);
Student obj4 = new Student("Ajay", 22);
Student obj5 = new Student("Ajay", 29);
Student obj6 = new Student("Sneha", 22);
// add customer objects to ArrayList
// before Sorting arraylist: iterate using Iterator
Iterator<Student> custIterator = al.iterator();
System.out.println("Before Sorting:\n");
while (custIterator.hasNext()) {
System.out.println(custIterator.next());
// sorting using Collections.sort(al, comparator);
Collections.sort(al, new CustomerSortingComparator());
// after Sorting arraylist: iterate using enhanced for-loop
System.out.println("\n\nAfter Sorting:\n");
for (Student customer : al) {
System.out.println(customer);
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Comparator;
class Student {
// instance member variables
String Name;
int Age;
// parameterized constructor
public Student(String Name, Integer Age) {
this.Name = Name;
this.Age = Age;
}
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
public Integer getAge() {
return Age;
}
public void setAge(Integer Age) {
this.Age = Age;
}
// overriding toString() method
@Override
public String toString() {
return "Customer{" + "Name=" + Name + ", Age=" + Age + '}';
}
static class CustomerSortingComparator implements Comparator<Student> {
@Override
public int compare(Student customer1, Student customer2) {
// for comparison
int NameCompare = customer1.getName().compareTo(customer2.getName());
int AgeCompare = customer1.getAge().compareTo(customer2.getAge());
// 2-level comparison using if-else block
if (NameCompare == 0) {
return ((AgeCompare == 0) ? NameCompare : AgeCompare);
} else {
return NameCompare;
}
}
}
public static void main(String[] args) {
// create ArrayList to store Student
List<Student> al = new ArrayList<>();
// create customer objects using constructor initialization
Student obj1 = new Student("Ajay", 27);
Student obj2 = new Student("Sneha", 23);
Student obj3 = new Student("Simran", 37);
Student obj4 = new Student("Ajay", 22);
Student obj5 = new Student("Ajay", 29);
Student obj6 = new Student("Sneha", 22);
// add customer objects to ArrayList
al.add(obj1);
al.add(obj2);
al.add(obj3);
al.add(obj4);
al.add(obj5);
al.add(obj6);
// before Sorting arraylist: iterate using Iterator
Iterator<Student> custIterator = al.iterator();
System.out.println("Before Sorting:\n");
while (custIterator.hasNext()) {
System.out.println(custIterator.next());
}
// sorting using Collections.sort(al, comparator);
Collections.sort(al, new CustomerSortingComparator());
// after Sorting arraylist: iterate using enhanced for-loop
System.out.println("\n\nAfter Sorting:\n");
for (Student customer : al) {
System.out.println(customer);
}
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Comparator;
class Student {
// instance member variables
String Name;
int Age;
// parameterized constructor
public Student(String Name, Integer Age) {
this.Name = Name;
this.Age = Age;
}
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
public Integer getAge() {
return Age;
}
public void setAge(Integer Age) {
this.Age = Age;
}
// overriding toString() method
@Override
public String toString() {
return "Customer{" + "Name=" + Name + ", Age=" + Age + '}';
}
static class CustomerSortingComparator implements Comparator<Student> {
@Override
public int compare(Student customer1, Student customer2) {
// for comparison
int NameCompare = customer1.getName().compareTo(customer2.getName());
int AgeCompare = customer1.getAge().compareTo(customer2.getAge());
// 2-level comparison using if-else block
if (NameCompare == 0) {
return ((AgeCompare == 0) ? NameCompare : AgeCompare);
} else {
return NameCompare;
}
}
}
public static void main(String[] args) {
// create ArrayList to store Student
List<Student> al = new ArrayList<>();
// create customer objects using constructor initialization
Student obj1 = new Student("Ajay", 27);
Student obj2 = new Student("Sneha", 23);
Student obj3 = new Student("Simran", 37);
Student obj4 = new Student("Ajay", 22);
Student obj5 = new Student("Ajay", 29);
Student obj6 = new Student("Sneha", 22);
// add customer objects to ArrayList
al.add(obj1);
al.add(obj2);
al.add(obj3);
al.add(obj4);
al.add(obj5);
al.add(obj6);
// before Sorting arraylist: iterate using Iterator
Iterator<Student> custIterator = al.iterator();
System.out.println("Before Sorting:\n");
while (custIterator.hasNext()) {
System.out.println(custIterator.next());
}
// sorting using Collections.sort(al, comparator);
Collections.sort(al, new CustomerSortingComparator());
// after Sorting arraylist: iterate using enhanced for-loop
System.out.println("\n\nAfter Sorting:\n");
for (Student customer : al) {
System.out.println(customer);
}
}
}
Output:
Unsorted
111 bbbb london
131 aaaa nyc
121 cccc jaipur
Sorted by rollno
111 bbbb london
121 cccc jaipur
131 aaaa nyc
Sorted by name
131 aaaa nyc
111 bbbb london
121 cccc jaipu
Post Views:
7,897
Related Tutorials
-
Java 9 Immutable List ExampleThis example demonstrates how to create immutable lists with the new Java 9 Collections factory methods With Java 9 release, Oracle is going one step…
-
Java Increase MemoryThe Java memory model specifies how the Java virtual machine works with the computer's memory (RAM). In this tutorial I will show you how to…
-
Java Properties File ExampleIn this tutorial I will show you how to store and retrieve values from a properties file in Java There are a number of scenarios…