Сравнительный и Компаратор в Java
Ключевая разница между сопоставимым и компаратором в Java
- Сопоставимо в Java — это объект для сравнения себя с другим объектом, тогда как Comparator — это объект для сравнения разных объектов разных классов.
- Comparable обеспечивает
compareTo()
метод сортировки элементов в Java, тогда как Компаратор предоставляетcompare()
метод сортировки элементов в Java. - Сопоставимый интерфейс присутствует в
java.lang
пакете, тогда как интерфейс Comparator присутствует вjava.util
пакет. - Comparable предоставляет одну последовательность сортировки, а Comparator предоставляет несколько последовательностей сортировки.
- Comparable влияет на исходный класс, тогда как Comparator не влияет на исходный класс.

Здесь я проанализировал разницу между сопоставимым и компаратором и всесторонне оценю их плюсы и минусы.
Что можно сравнить в Java?
сравнимый in Java это объект, который сравнивает себя с другим объектом. Он помогает сортировать список пользовательских объектов. Java.lang.Сравнимый интерфейс должен быть реализован классом для сравнения его экземпляров. Массив объектов, реализующих сопоставимый интерфейс, автоматически сортируется по Arrays.sort
и Collections.sort
методы.
Метод, используемый в Comparable
Я хотел бы выделить важный метод, который я часто использую в интерфейсе Comparable:
По сравнению с():
Метод CompareTo() используется для выполнения естественной сортировки строки. Значение естественной сортировки — это порядок сортировки, который применяется к объекту, например, числовой порядок для сортировки целых чисел, алфавитный порядок для строки и т. д.
Синтаксис CompareTo()
метод выглядит следующим образом:
int compareTo(T obj)
В приведенном выше синтаксисе T обозначает тип объектов, которые вы собираетесь сравнивать.
CompareTo()
метод сравнивает объект с T obj.
Вывод:
- Он возвращает 0, если значения равны.
- Если объект имеет меньшее значение, этот метод возвращает отрицательное значение.
- Если объект имеет более высокое значение, он возвращает положительное значение.
Пример сопоставимости в Java
Следующая программа Java Сравнительный пример показывает сравнение двух символов: «a» и «b». Символ «а» стоит перед буквой «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
Что такое компаратор Java?
Компаратор in Java — объект для сравнения разных объектов разных классов. Интерфейс компаратора в Java также используется для упорядочения объектов пользовательских классов. Он включает в себя два важных метода интерфейса компаратора, известные как сравнение (объект obj1, объект obj2) и равенство (элемент объекта).
Метод, используемый в Comparator
В своей практике я часто полагаюсь на следующие критические методы интерфейса компаратора:
Сравнивать():
Compare()
позволяет упорядочивать объекты. Для этого вам необходимо создать класс, реализующий интерфейс компаратора. После этого вам необходимо переопределить его метод сравнения.
Синтаксис compare()
метод выглядит следующим образом:
compare(Object obj1, Object obj2)
В приведенном выше синтаксисе obj1 и obj2 — это два объекта, которые необходимо сравнить с помощью метода Compare(). compare()
метод.
Вывод:
- Он возвращает отрицательное целое число, если первый аргумент меньше второго.
- Возвращает ноль, если первый аргумент и второй аргумент равны.
- Этот метод может возвращать положительное целое число в том случае, если первый аргумент больше второго.
Вы должны убедиться, что отношение транзитивно. Например, ((compare(a, b)>0) && (compare(b, c)>0)) что подразумевает сравнение(a, c)>0.
Пример сопоставимости в Java
В ниже Java пример сравнения, их 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()
метод выглядит следующим образом:
public boolean equals(Object o)
Этот метод принимает два параметра: 1) любой объект и 2) возвращаемое значение. Он возвращает true, если переданный аргумент не равен нулю и является объектом аналогичного типа, имеющим то же числовое значение.
Пример метода «Равно»:
В приведенном ниже примере я буду сравнивать четыре переменные друг с другом. Три переменные имеют целочисленный тип и одна — короткого типа. Первый результат является ложным, поскольку значение 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 в Java
Я часто вижу путаницу между Java Сопоставимое и Компаратор; вот основное отличие:
Основа сравнения | сравнимый | Компаратор |
---|---|---|
Способ доставки | Сопоставимые обеспечивает compareTo() метод сортировки элементов в Java. |
Компаратор обеспечивает compare() метод сортировки элементов в Java. |
Упаковка | Сопоставимый интерфейс присутствует в java.lang пакет. |
Интерфейс компаратора присутствует в java.util пакет. |
Логика сортировки | Логика сортировки должна принадлежать тому же классу, что и объект, который вы собираетесь сортировать. | Логика сортировки должна быть вынесена в отдельные классы, чтобы писать разные сортировки на основе разных атрибутов объектов. |
Объект класса | Класс, объекты которого вы хотите отсортировать, должен реализовывать интерфейс Comparable. | Класс, объекты которого вы хотите отсортировать, не нуждается в реализации интерфейса компаратора. |
Сортировка последовательностей | Он обеспечивает отдельные последовательности сортировки. | Он обеспечивает несколько последовательностей сортировки. |
Порядок сортировки | Этот метод может сортировать данные в соответствии с естественным порядком сортировки. | Этот метод сортирует данные в соответствии с настроенным порядком сортировки. |
Класс | Это влияет на исходный класс. т. е. фактический класс изменяется. | Это не влияет на исходный класс, т. е. фактический класс не изменяется. |
Применение | Часто реализуется в API с помощью классов Calendar, Wrapper, Date и Строка. |
Он реализован для сортировки экземпляров сторонних классов. |
Осуществлять | Все классы-оболочки и классы строк реализуют сопоставимые интерфейсы. | Единственными реализованными классами Comparator являются Collator и RuleBasedColator. |
Лучшие практики при использовании компаратора и сопоставимого в Java
- Используйте сопоставимый интерфейс, если сравнение является стандартным для конкретного класса.
- Вы можете использовать лямбды с компаратором.
- Многие из доступных основных классов реализуют сопоставимый интерфейс.
- При сортировке Set или Map можно использовать TreeSet и TreeMap.
- Территория
compareTo()
метод работает как с компаратором, так и с сопоставимым. - Используйте интерфейс компаратора только тогда, когда вам требуется большая гибкость.
- Территория
compareTo()
Метод вернет положительное целое число, если первый объект больше другого, отрицательное, если оно меньше, и ноль, если оба объекта одинаковы.
Как выбрать между сравниваемым объектом и компаратором
В заключение мой практический опыт показывает, что использование Comparable и Comparator в Java значительно расширяет возможности контроля над сортировкой данных, повышая как производительность, так и функциональность.