Сравнительный и Компаратор в Java

Ключевая разница между сопоставимым и компаратором в Java

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

Разница между 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 Сопоставимое и Компаратор; вот основное отличие:

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