Класс Comparable
Класс Comparable - это интерфейс из пакета
java.lang, который позволяет задать
естественный порядок сравнения объектов.
Класс, реализующий этот интерфейс, обязуется
предоставить метод compareTo. В этот метод
мы передаем объект того же типа, с которым
хотим сравнить текущий объект. Метод возвращает
целое число: отрицательное, если текущий объект
меньше переданного, ноль, если они равны,
и положительное, если текущий объект больше.
Благодаря Comparable работают сортировка
коллекций через Collections.sort и
List.sort, а также классы вроде
TreeSet и TreeMap.
Синтаксис
public class MyClass implements Comparable<MyClass>
{
public int compareTo(MyClass obj)
{
// comparison logic
}
}
Пример
Давайте создадим класс Item с полем
value и реализуем в нем интерфейс
Comparable, сравнивая объекты по значению:
import java.util.List;
import java.util.Collections;
public class Main
{
static class Item implements Comparable<Item>
{
int value;
Item(int value)
{
this.value = value;
}
public int compareTo(Item other)
{
return this.value - other.value;
}
public String toString()
{
return String.valueOf(value);
}
}
public static void main(String[] args)
{
List<Item> list = List.of(
new Item(3),
new Item(1),
new Item(2)
);
List<Item> sorted = new java.util.ArrayList<>(list);
Collections.sort(sorted);
System.out.println(sorted);
}
}
Результат выполнения кода:
[1, 2, 3]
Пример
Давайте сравним два объекта напрямую через
метод compareTo и посмотрим на
возвращаемые значения:
public class Main
{
public static void main(String[] args)
{
String a = "abcde";
String b = "12345";
System.out.println(a.compareTo(b));
System.out.println(b.compareTo(a));
System.out.println(a.compareTo(a));
}
}
Результат выполнения кода:
48
-48
0
Пример
Давайте отсортируем список чисел, используя
естественный порядок, заданный Comparable:
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class Main
{
public static void main(String[] args)
{
List<Integer> res = new ArrayList<>(
List.of(5, 3, 1, 4, 2)
);
Collections.sort(res);
System.out.println(res);
}
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Смотрите также
-
интерфейс
Comparator,
который задает внешний порядок сравнения -
метод
compare,
который сравнивает два объекта -
метод
naturalOrder,
который возвращает компаратор по умолчанию -
метод
reversed,
который меняет порядок сортировки на обратный