Для сортировки и упорядочивания в Java предусмотрены два интерфейса: Comparable
и Comparator
. Оба интерфейса используются для контроля процессов сортировки.
Comparable
является общим интерфейсом, который реализуется в классе объекта, который мы собираемся сортировать. Простейший пример использования Comparable
- сортировка чисел или строк.
public class ExampleComparable implements Comparable<ExampleComparable> {
private int id;
// Другие поля
// Метод фреймворка Collection вызывает этот метод для сортировки
@Override
public int compareTo(ExampleComparable ex) {
// Возвращает отрицательное целое число, ноль или положительное целое число,
// объект считается меньше, равным или больше указанного объекта.
return this.id - ex.id;
}
Comparator
это функциональный интерфейс и он используется, когда нужно задать особый порядок сортировки, отличный от естественного. Он не ограничивает вас одним естественным порядком сортировки, вы можете создать несколько компараторов корректируя их под требуему вам логику сортировки.
import java.util.Comparator;
// Класс Person
class Person {
int id;
String name;
// Constructor
public Person(int id, String name)
{
this.id = id;
this.name = name;
}
public String toString()
{
return this.id + " " + this.name;
}
}
class Sortbyid implements Comparator<Person> {
// используйте поле id для сортировки
public int compare(Person a, Person b)
{
return a.id - b.id;
}
}
В целом, при сортировке объектов в Java рекомендуется следующее:
Comparable
.Comparator
.Comparator
.Знание и грамотное использование интерфейсов Comparable
и Comparator
повышает эффективность работы с коллекциями в Java и позволяет гибко управлять процессом сортировки данных.