Учебники

72) Сравнение с Компаратором

Что сопоставимо?

Сопоставимый объект может сравнивать себя с другим объектом. Класс должен реализовывать интерфейс java.lang.Comparable для сравнения его экземпляров.

Это также поможет вам отсортировать список пользовательских объектов.

Массив объектов, реализующих сопоставимый интерфейс, автоматически сортируется методами Arrays.sort и Collections.sort.

Из этого урока Comparable vs. Comparator вы узнаете:

Что такое компаратор?

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