Разница между Comparable и Comparator в Java

Содержание:

Anonim

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

Comparable в Java - это объект для сравнения себя с другим объектом. Это помогает отсортировать список настраиваемых объектов. Интерфейс java.lang.Comparable должен быть реализован классом для сравнения его экземпляров. Массив объектов, реализующих сопоставимый интерфейс, автоматически сортируется методами Arrays.sort и Collections.sort.

В этом руководстве Comparator vs Comparable in Java вы узнаете:

  • Что сопоставимо в Java?
  • Что такое компаратор в Java?
  • Метод, используемый в Comparable:
  • Метод, используемый в компараторе:
  • Разница между Comparable и Comparator в Java
  • Лучшие практики при использовании Comparator и Comparable в Java

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

Компаратор в Java - это объект для сравнения разных объектов разных классов. Интерфейс компаратора в Java также используется для упорядочивания объектов пользовательских классов. Он включает два важных метода интерфейса компаратора, известных как compare (Object obj1, Object obj2) и equals (элемент Object).

КЛЮЧЕВЫЕ ОТЛИЧИЯ:

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

Метод, используемый в Comparable:

Ниже приводится важный метод, используемый в интерфейсе Comparable:

Сравнить с():

Метод CompareTo () используется для выполнения естественной сортировки по строке. Значение естественной сортировки - это порядок сортировки, который применяется к объекту, например числовой порядок для сортировки целых чисел, алфавитный порядок для String и т. Д.

Синтаксис метода CompareTo () следующий:

int compareTo(T obj)

В приведенном выше синтаксисе T обозначает тип объектов, которые вы собираетесь сравнивать.

Метод CompareTo () сравнивает объект с объектом T obj.

Выход:

  • Он возвращает 0, если значения равны.
  • В случае, если объект имеет меньшее значение, этот метод возвращает отрицательное значение.
  • Если объект имеет более высокое значение, он возвращает положительное значение.

Пример метода CompareTo ():

Следующая программа сопоставимого примера Java показывает сравнение двух символов, «a» и «b». Буква «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 : -1Compare To 'b' a is : 1Compare To 'b' b is : 0

Метод, используемый в компараторе:

Ниже приведены важные методы, используемые в интерфейсе компаратора:

Сравнивать():

Compare () позволяет вам заказывать объекты. Для этого вам необходимо создать класс, реализующий интерфейс компаратора. После этого вам нужно переопределить метод сравнения.

Синтаксис метода compare () следующий:

compare(Object obj1, Object obj2)

В приведенном выше синтаксисе obj1 и obj2 - это два объекта, которые нужно сравнивать с помощью метода compare ().

Выход:

  • Он возвращает отрицательное целое число, если первый аргумент меньше второго.
  • Возвращает ноль, если первый аргумент и второй аргумент равны.
  • Этот метод может возвращать положительное целое число, если первый аргумент больше второго.

Вы должны убедиться, что отношение транзитивное. Например, ((compare (a, b)> 0) && (compare (b, c)> 0)), что подразумевает compare (a, c)> 0.

Пример метода сравнения:

В приведенной ниже программе примера компаратора 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 zeroSystem.out.println(Integer.compare(x, y));int p = 40;int q = 40;// as 30 equals 30,// Output will be zeroSystem.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 zeroSystem.out.println(Integer.compare(r, s));}}

Выход:

-101

Равно ():

Equals () проверяет, равен ли числовой объект объекту, который передается в качестве аргумента, или нет.

Синтаксис метода equals () следующий:

публичное логическое равенство (объект o)

Этот метод принимает два параметра: 1) любой объект 2) возвращаемое значение. Он возвращает истину, если переданный аргумент не равен нулю и является объектом аналогичного типа, имеющим такое же числовое значение.

Пример метода Equals:

В приведенном ниже примере мы сравниваем четыре переменные друг с другом. Три переменные относятся к целочисленному типу, а одна - к короткому. Первый результат неверен, поскольку значение 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));}}

Выход

falsetruefalse

Разница между Comparable и Comparator в Java

Разница между Comparable и Comparator в Java

Вот основные различия между Java Comparable и Comparator:

Сопоставимый Компаратор
Comparable предоставляет метод compareTo () для сортировки элементов в Java. Comparator предоставляет метод compare () для сортировки элементов в Java.
Сопоставимый интерфейс присутствует в пакете java.lang. Интерфейс компаратора присутствует в пакете java.util.
Логика сортировки должна быть в том же классе, чей объект вы собираетесь сортировать. Логика сортировки должна быть в отдельном классе, чтобы писать разные сортировки на основе разных атрибутов объектов.
Класс, объекты которого вы хотите отсортировать, должен реализовывать сопоставимый интерфейс. Класс, объекты которого вы хотите отсортировать, не должен реализовывать интерфейс компаратора.
Он обеспечивает одиночные последовательности сортировки. Он обеспечивает несколько последовательностей сортировки.
Этот метод позволяет сортировать данные в соответствии с естественным порядком сортировки. Этот метод сортирует данные в соответствии с индивидуальным порядком сортировки.
Это влияет на исходный класс. т. е. изменен фактический класс. Это не влияет на исходный класс, т.е. фактический класс не изменяется.
Часто реализуется в API : Calendar, Wrapper classes, Date и String. Реализовано для сортировки экземпляров сторонних классов.
Все классы-оболочки и класс String реализуют сопоставимый интерфейс. Единственные реализованные классы Comparator - Collator и RuleBasedColator.

Лучшие практики при использовании Comparator и Comparable в Java

  • Используйте сопоставимый интерфейс, если сравнение является стандартным для конкретного класса.
  • Вы можете использовать лямбды с компаратором.
  • Многие базовые классы, доступные в, реализуют сопоставимый интерфейс.
  • Можно использовать TreeSet и TreeMap или при сортировке Set или Map.
  • Метод compareTo () работает как с компаратором, так и с сопоставимым.
  • Используйте интерфейс компаратора только тогда, когда вам <требуется большая гибкость.
  • Метод compareTo () вернет положительное целое число, если первый объект больше другого, отрицательное, если оно меньше, и ноль, если оба объекта одинаковы.