Что сопоставимо?
Сопоставимый объект может сравнивать себя с другим объектом. Класс должен реализовывать интерфейс 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 предоставляет несколько последовательностей сортировки.
- Сопоставимый влияет на исходный класс, тогда как компаратор не влияет на исходный класс.