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