Comparator — одна из самых полезных и запутанных тем в Java. Полезная, поскольку предоставляет методы сортировки для объектов коллекции и сбивает с толку, поскольку это звучит похоже на интерфейс Comparable в Java.
Что такое компаратор в Java?
Интерфейс Java Comparator используется для упорядочивания объектов внутри определенного пользователем класса. Этот интерфейс доступен в пакете java.util и включает в себя два важных метода, известных как сравнение (Object obj1, Object obj2) и equals (Элемент Object).
Методы интерфейса Java Comparator
Есть два метода компараторов в Java, а именно:
| Методы | Описание |
| compare(Object obj1,Object obj 2) | Сравнивает первый объект с другим |
| equals(Object obj) | Сравнивает текущий объект с заданным объектом obj |
Ниже приведен код использования обоих методов компаратором Java.
package JavaComparator;
import java.util.*;
import java.lang.*;
import java.io.*;
class Employee {
int EmpID;
String name, address;
public Employee(int EmpID, String name, String address) {
this.EmpID = EmpID;
this.name = name;
this.address = address;
}
public String toString() {
return this.EmpID + " " + this.name + " " + this.address;
}
}
class Sortbyroll implements Comparator<Employee> {
public int compare(Employee a, Employee b){
return a.EmpID - b.EmpID;
}
}
class Sortbyname implements Comparator<Employee> {
public int compare(Employee a, Employee b) {
return a.name.compareTo(b.name);
}
}
class Main {
public static void main (String[] args){
ArrayList<Employee> Arr = new ArrayList<Employee>();
Arr.add(new Employee(1011, "Rajesh", "Bangalore"));
Arr.add(new Employee(1031, "Ralph", "Hyderabad"));
Arr.add(new Employee(1201, "Karan", "Haryana"));
System.out.println("Unsorted Data");
for (int i=0; i<Arr.size(); i++)
System.out.println(Arr.get(i));
Collections.sort(Arr, new Sortbyroll());
System.out.println("nSorted data according to Employee IDs");
for (int i=0; i<Arr.size(); i++)
System.out.println(Arr.get(i));
Collections.sort(Arr, new Sortbyname());
System.out.println("nSorted data according to Employee name");
for (int i=0; i<Arr.size(); i++)
System.out.println(Arr.get(i));
}
}
Вывод:
Unsorted Data
1011 Rajesh Bangalore
1031 Ralph Hyderabad
1201 Karan Haryana
Sorted data according to Employee IDs
1011 Rajesh Bangalore
1031 Ralph Hyderabad
1201 Karan Haryana
Sorted data according to Employee name
1201 Karan Haryana
1011 Rajesh Bangalore
1031 Ralph Hyderabad
Давайте разберемся со вторым методом equals.
Пример Java equals():
package Equals;
public class EqualsExample {
public static void main(String equals) {
System.out.println(new Eqls("Harsha", 35, 12000).equals(new Eqls("Hari",25,12000)));
System.out.println(new Eqls("Karan", 44, 45000).equals(new Eqls("Karan", 44, 45000)));
System.out.println(new Eqls("latha", 54, 60000).equals(new Object()));
}
static class Eqls{
private String name;
private int age;
private int Salary;
public Eqls(String name, int age, int Salary) {
this.name = name;
this.age = age;
this.Salary = Salary;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Eqls eqls= (Eqls) o;
return age == eqls.age
Salary == eqls.Salary
name.equals(eqls.name);
}
}
}
Вывод:
false
true
false
Сравнение Comparator и Comparable
| Comparator | Comparable |
| Компаратор используется для сортировки атрибутов различных объектов. | Интерфейс используется для сортировки объектов с естественным упорядочением. |
| Интерфейс компаратора сравнивает два различных предоставленных объекта класса. | Сравнивает this ссылку с указанным объектом |
| Компаратор присутствует в java.пакет util. | Находится в java.lang package. |
| Компаратор не влияет на исходный класс | Влияет на исходный класс, т. е. фактический класс модифицируется. |
| Компаратор предоставляет метод compare(), equals() для сортировки элементов. | предоставляет метод compareTo() для сортировки элементов. |
