Что сопоставимо?
Сопоставимый объект может сравнивать себя с другим объектом. Класс должен реализовывать интерфейс java.lang.Comparable для сравнения его экземпляров.
Это также поможет вам отсортировать список пользовательских объектов.
Массив объектов, реализующих сопоставимый интерфейс, автоматически сортируется методами Arrays.sort и Collections.sort.
Из этого урока Comparable vs. Comparator вы узнаете:
- Что сопоставимо?
- Что такое компаратор?
- Метод, используемый в Comparable:
- Метод, используемый в Компараторе:
- Разница между сопоставимым и компаратором
- Лучшие практики при использовании Comparable и Comparator в Java
Что такое компаратор?
Интерфейс компаратора используется для упорядочения объектов пользовательских классов. Он способен сравнивать два объекта двух разных классов. Он включает в себя два важных метода, известных как сравнение (Object obj1, Object obj2) и equals (Элемент Object).
Метод, используемый в Comparable:
Ниже приводится важный метод, используемый в интерфейсе Comparable:
По сравнению с():
Метод CompareTo () используется для естественной сортировки строк. Смысл естественной сортировки — это порядок сортировки, который применяется к объекту, например, числовой порядок для сортировки целых чисел, алфавитный порядок для строки и т. Д.
Синтаксис метода CompareTo () следующий:
int compareTo(T obj)
В приведенном выше синтаксисе T обозначает тип объектов, которые вы собираетесь сравнивать.
Метод CompareTo () сравнивает объект с T obj.
Вывод:
- Возвращает 0, если значения равны.
- В случае, если объект имеет меньшее значение, этот метод возвращает отрицательное значение.
- Если объект имеет более высокое значение, он возвращает положительное значение.
Пример метода CompareTo ():
Следующая программа показывает сравнение двух символов: «a» и «b». Символ «а» стоит перед «б» в алфавитном порядке.
Следовательно, вывод равен -1. Символ «b» следует после «a» в алфавитном порядке. Следовательно, вывод равен 1. Символ «a» и «b» оба эквивалентны. Следовательно, вывод равен 0.
public class Sample_String {
public static void main(String[] args) {
String str_Sample = "a";
System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b"));
str_Sample = "b";
System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a"));
str_Sample = "b";
System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b"));
}
}
Вывод
Compare To 'a' b is : -1 Compare To 'b' a is : 1 Compare To 'b' b is : 0
Метод, используемый в Компараторе:
Ниже приведены важные методы, используемые в интерфейсе компаратора:
Сравнить ():
Compare () позволяет упорядочить объекты. Для этого вам нужно создать класс, который реализует интерфейс компаратора. После этого вам нужно переопределить метод сравнения.
Синтаксис метода compare () следующий:
compare(Object obj1, Object obj2)
В приведенном выше синтаксисе obj1 и obj2 — это два объекта, которые вы должны сравнить, используя метод compare ().
Вывод:
- Возвращает отрицательное целое число, если первый аргумент меньше второго.
- Возвращает ноль, если первый аргумент и второй аргумент равны.
- Этот метод может вернуть положительное целое число, если первый аргумент больше второго.
Вы должны убедиться, что отношение является переходным. Например, ((сравнение (a, b)> 0) && (сравнение (b, c)> 0)), что подразумевает сравнение (a, c)> 0.
Пример метода сравнения:
В приведенной ниже программе есть 6 переменных. «x», «y», «p», «q», «r» и «s». Выходное значение равно -1, поскольку значение «x», 20 меньше значения «y», 30. Выходное значение равно 0, поскольку значение «p», 40 равно значению «q», 40 ,
import java.lang.Integer;
public class example {
public static void main(String args[])
{
int x = 20;
int y = 30;
// as 10 less than 20,
// Output will be a value less than zero
System.out.println(Integer.compare(x, y));
int p = 40;
int q = 40;
// as 30 equals 30,
// Output will be zero
System.out.println(Integer.compare(p, q));
int r = 20;
int s = 7;
// as 15 is greater than 8,
// Output will be a value greater than zero
System.out.println(Integer.compare(r, s));
}
}
Вывод:
-1 0 1
Equals ():
Equals () проверяет, равен ли объект числа объекту, переданному в качестве аргумента, или нет.
Синтаксис метода equals () следующий:
public boolean equals (Объект o)
Этот метод принимает два параметра: 1) любой объект; 2) возвращаемое значение. Он возвращает true, если переданный аргумент не равен NULL и является объектом аналогичного типа, имеющим такое же числовое значение.
Пример метода Equals:
В приведенном ниже примере мы сравниваем четыре переменные друг с другом. Три переменные имеют тип integer и одну переменную типа short. Первый результат ложен, поскольку значение p, равное 5, не равно значению q, равному 20.
Второй результат верен, потому что значения переменных p и r одинаковы, а это 5. Наконец, выходные данные ложны, так как переменные p и s имеют разные присвоенные значения.
public class Test {
public static void main(String args[]) {
Integer p = 5;
Integer q = 20;
Integer r =5;
Short s = 5;
System.out.println(p.equals(q));
System.out.println(p.equals(r));
System.out.println(p.equals(s));
}
}
Вывод
false true false
Разница между сопоставимым и компаратором
Вот основные различия между Comparable и Comparator:
| сравнимый | компаратор |
| Comparable предоставляет метод CompareTo () для сортировки элементов в Java. | Comparator предоставляет метод compare () для сортировки элементов в Java. |
| Сопоставимый интерфейс присутствует в пакете java.lang. | Интерфейс компаратора присутствует в пакете java.util. |
| Логика сортировки должна быть в том же классе, чей объект вы собираетесь сортировать. | Логика сортировки должна быть в отдельном классе, чтобы писать разные сортировки на основе разных атрибутов объектов. |
| Класс, чьи объекты вы хотите отсортировать, должен реализовывать сопоставимый интерфейс. | Классу, чьи объекты вы хотите отсортировать, не нужно реализовывать интерфейс компаратора. |
| Предоставляет отдельные последовательности сортировки. | Он обеспечивает несколько последовательностей сортировки. |
| Этот метод может сортировать данные в соответствии с естественным порядком сортировки. | Этот метод сортирует данные в соответствии с настроенным порядком сортировки. |
| Это влияет на оригинальный класс. фактический класс изменен. | Это не влияет на исходный класс, т. Е. Фактический класс не изменяется. |
| Реализовано в API часто с помощью: календаря, классов Wrapper, даты и строки. | Он реализован для сортировки экземпляров сторонних классов. |
| Все классы-обертки и класс String реализуют сопоставимый интерфейс. | Единственными реализованными классами Comparator являются Collator и RuleBasedColator. |
Лучшие практики при использовании Comparable и Comparator в Java
- Используйте сопоставимый интерфейс, если сравнение является стандартным для определенного класса.
- Вы можете использовать лямбды с компаратором.
- Многие основные классы, доступные в, реализуют сопоставимый интерфейс.
- Можно использовать TreeSet и TreeMap или при сортировке Set или Map.
- Метод compareTo () работает как с компаратором, так и с сопоставимым.
- Используйте интерфейс компаратора только тогда, когда вам требуется больше гибкости.
- Метод compareTo () вернет положительное целое число, если первый объект больше другого, отрицательное, если оно ниже, и ноль, если оба они одинаковы.
ОСНОВНЫЕ РАЗЛИЧИЯ:
- Comparable предоставляет метод CompareTo () для сортировки элементов в Java, тогда как Comparator предоставляет метод Compare () для сортировки элементов в Java.
- Сопоставимый интерфейс присутствует в пакете java.lang, тогда как интерфейс Comparator присутствует в пакете java.util.
- Comparable предоставляет отдельные последовательности сортировки, в то время как Comparator предоставляет несколько последовательностей сортировки.
- Сопоставимый влияет на исходный класс, тогда как компаратор не влияет на исходный класс.
