How to Implement a Custom Comparator for a LinkedHashSet in Java?
In Java, we cannot directly implement a custom comparator for a LinkedHashSet. But sometimes we need a requirement of custom comparator for example custom sorting. So, we can use some alternative approaches to fulfill the requirements.
In this article, we will be using a class for creating the custom comparator and this class will implement the Comparable interface for a LinkedHashSet in Java.
Approach:
- In the first step, we have created a class which is the type of Employee, and implemented a Comparable interface.
- It accepts a value of Employee type in a constructor and accepts UserIDs.
- Then Override compareTo method.
- We also Override a toString method for printing the output.
- Now we create the LinkedHashSet of type Employee and add Employee ID.
- Then we add these LinkedHashSet values to an ArrayList.
- So, we can use Collection.Sort which sorts the elements by User IDs.
- Then we print the output.
Program to Implement a Custom Comparator for a LinkedHashSet in Java
Suppose we have a LinkedHashSet of Employee IDs and want to perform a custom sorting, for this follow the below implementation.
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
// We need to implement the Comparable interface for creating
// a custom comparator.
class Employee implements Comparable<Employee> {
private int employeeId;
public Employee(int id) {
this.employeeId = id;
}
public int getId() {
return this.employeeId;
}
// We override the toString method.
public String toString() {
return "Employee -> " + getId();
}
// Custom comparator
public int compareTo(Employee otherEmployee) {
return this.getId() - otherEmployee.getId();
}
}
public class GFG {
public static void main(String[] args) {
LinkedHashSet<Employee> setOfEmployees = new LinkedHashSet<>();
setOfEmployees.add(new Employee(3));
setOfEmployees.add(new Employee(1));
setOfEmployees.add(new Employee(2));
// Convert the set to a list for sorting
List<Employee> listUsers = new ArrayList<>(setOfEmployees);
// Sort the list using the custom comparator
Collections.sort(listUsers);
// Print the sorted list
System.out.println(listUsers);
}
}
Output
[Employee -> 1, Employee -> 2, Employee -> 3]
Explanation of the Program:
- In the above program, we have defined a class
Employee
that implements theComparable
interface. ThecompareTo
method is implemented to compareEmployee
objects based on their employee IDs. - We create a
LinkedHashSet
namedsetOfEmployees
to storeEmployee
objects. Note thatLinkedHashSet
maintains insertion order. - We convert the
LinkedHashSet
to anArrayList
namedlistUsers
to perform sorting. This is done to demonstrate sorting using the custom comparator. - We sort the
listUsers
usingCollections.sort
method, which uses the custom comparator defined in theEmployee
class. - Finally, we print the sorted list.