Интерфейсы Comparable и Comparator в Java
Comparable и Comparator являются интерфейсами и могут использоваться для сортировки элементов коллекции.
Comparable | Comparator |
---|---|
Comparable обеспечивает единую последовательность сортировки. Другими словами, мы можем отсортировать коллекцию на основе одного элемента, такого как идентификатор, имя и цена. | Comparator предоставляет несколько последовательностей сортировки. Другими словами, мы можем отсортировать коллекцию по нескольким элементам, таким как идентификатор, имя, цена и т. д. |
Comparable влияет на исходный класс, т.е. модифицируется фактический класс. | Comparator не влияет на исходный класс, т.е. фактический класс не изменяется. |
Comparable предоставляет метод compareTo() для сортировки элементов. | Comparator предоставляет метод compare() для сортировки элементов. |
Comparable присутствует в пакете java.lang. | Comparator присутствует в пакете java.util. |
Мы можем отсортировать элементы списка типа Comparable методом Collections.sort(List). | Мы можем отсортировать элементы списка типа Comparator методом Collections.sort(List, Comparator). |
Пример использования Comparable
public class Person implements Comparable<Person> {
int id;
String name;
int age;
Person(int id, String name, int age){
this.id = id;
this.name = name;
this.age = age;
}
// Сортируем по возрасту
public int compareTo(Person person){
if(age == person.age)
return 0;
else if(age > person.age)
return 1;
else
return -1;
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String args[]) {
List<Person> persons = new ArrayList<>();
persons.add(new Person(1, "Иван", 23));
persons.add(new Person(6, "Андрей", 27));
persons.add(new Person(5, "Ольга", 21));
Collections.sort(persons);
System.out.println("Сортировка по возрасту:");
for(Person person : persons){
System.out.println(person.id + " "
+ person.name + " "
+ person.age);
}
}
}
Вывод:
Сортировка по возрасту:
5 Ольга 21
1 Иван 23
6 Андрей 27
Пример использования Comparator
public class Person {
int id;
String name;
int age;
Person(int id, String name, int age){
this.id = id;
this.name = name;
this.age = age;
}
}
import java.util.Comparator;
public class AgeComparator implements Comparator<Person> {
public int compare(Person p1,Person p2) {
if(p1.age == p2.age)
return 0;
else if(p1.age > p2.age)
return 1;
else
return -1;
}
}
import java.util.Comparator;
public class NameComparator implements Comparator<Person> {
public int compare(Person p1,Person p2) {
return p1.name.compareTo(p2.name);
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String args[]) {
List<Person> persons = new ArrayList<>();
persons.add(new Person(1, "Иван", 23));
persons.add(new Person(6, "Андрей", 27));
persons.add(new Person(5, "Ольга", 21));
System.out.println("Сортировка по имени:");
Collections.sort(persons, new NameComparator());
for(Person person : persons){
System.out.println(person.id + " "
+ person.name + " "
+ person.age);
}
System.out.println("Сортировка по возрасту:");
Collections.sort(persons, new AgeComparator());
for(Person person : persons){
System.out.println(person.id + " "
+ person.name + " "
+ person.age);
}
}
}
Вывод:
Сортировка по имени:
6 Андрей 27
1 Иван 23
5 Ольга 21
Сортировка по возрасту:
5 Ольга 21
1 Иван 23
6 Андрей 27
Читайте также:
- Методы класса Object в Java
- Как HashMap обрабатывает коллизии в Java
- В чем будет проблема, если не переопределять метод hashCode()
Комментарии
Отправить комментарий