Comparable vs Comparator in Java
Ключова різниця між Comparable і Comparator в Java
- Порівняний в Java — це об’єкт для порівняння з іншим об’єктом, тоді як Comparator — це об’єкт для порівняння різних об’єктів різних класів.
- Comparable забезпечує
compareTo()
метод сортування елементів Java, тоді як Comparator надаєcompare()
метод сортування елементів Java. - Подібний інтерфейс присутній у
java.lang
пакет, тоді як інтерфейс Comparator присутній уjava.util
пакет. - Comparable забезпечує одну послідовність сортування, а Comparator — кілька послідовностей сортування.
- Comparable впливає на початковий клас, тоді як Comparator не впливає на вихідний клас.

Тут я проаналізував різницю між comparable і Comparator і всебічно оцінив їхні плюси та мінуси.
Що порівнюється в Java?
Порівнюваний in Java це об'єкт, який порівнює себе з іншим об'єктом. Допомагає сортувати список призначених для користувача об’єктів. The Java.lang.Порівняльний інтерфейс має бути реалізований класом, щоб порівнювати його екземпляри. Масив об’єктів, що реалізують порівнянний інтерфейс, сортується автоматично за Arrays.sort
та Collections.sort
методи
Метод, використаний у Comparable
Я хотів би виділити важливий метод, який я часто використовую в інтерфейсі Comparable:
CompareTo():
Метод CompareTo() використовується для природного сортування рядка. Значення природного сортування — це порядок сортування, який застосовується до об’єкта, наприклад, числовий порядок для сортування цілих чисел, алфавітний порядок для String тощо.
Синтаксис CompareTo()
метод такий:
int compareTo(T obj)
У наведеному вище синтаксисі T означає тип об’єктів, які ви збираєтеся порівнювати.
CompareTo()
метод порівнює об'єкт з T obj.
вихід:
- Він повертає 0, якщо значення рівні.
- Якщо об’єкт має нижче значення, то цей метод повертає від’ємне значення.
- Якщо об’єкт має більше значення, він повертає додатне значення.
Приклад порівнянного в Java
Наступна програма Java порівняльний приклад показує порівняння двох символів «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
Що таке компаратор в Java?
Компаратор in Java є об'єктом для порівняння різних об'єктів різних класів. Інтерфейс компаратора в Java також використовується для впорядкування об'єктів визначених користувачем класів. Він включає два важливі методи інтерфейсу компаратора, відомі як порівняння (Object obj1, Object obj2) і дорівнює (Object element).
Метод, використаний у Comparator
У своїй практиці я часто покладаюся на наступні критичні методи інтерфейсу компаратора:
Порівняти():
Compare()
дозволяє замовляти об'єкти. Для цього вам потрібно створити клас, який реалізує інтерфейс компаратора. Після цього вам потрібно перевизначити його метод порівняння.
Синтаксис compare()
метод такий:
compare(Object obj1, Object obj2)
У наведеному вище синтаксисі obj1 і obj2 — це два об’єкти, які потрібно порівняти за допомогою методу compare(). compare()
метод.
вихід:
- Він повертає від’ємне ціле число, якщо перший аргумент менший за другий.
- Повертає нуль, якщо перший і другий аргументи рівні.
- Цей метод може повернути додатне ціле число, якщо перший аргумент більший за другий.
Ви повинні переконатися, що відношення є транзитивним. Наприклад, ((порівняйте(a, b)>0) && (порівняйте(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) значення, що повертається. Він повертає істину, якщо переданий аргумент не є нульовим і є об’єктом подібного типу з таким самим числовим значенням.
Приклад методу 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 в Java
Я часто бачу плутанину між Java Comparable і Comparator; ось головна відмінність:
Основа порівняння | Порівнюваний | компаратор |
---|---|---|
Метод | Порівнянні забезпечують compareTo() метод сортування елементів Java. |
Компаратор забезпечує compare() метод сортування елементів Java. |
пакет | Подібний інтерфейс присутній у java.lang пакет. |
Інтерфейс компаратора присутній у java.util пакет. |
Логіка сортування | Логіка сортування має бути в тому ж класі, що й об’єкт, який ви збираєтеся сортувати. | Логіка сортування повинна бути в окремих класах для запису різних сортувань на основі різних атрибутів об'єктів. |
Об'єкт класу | Клас, об'єкти якого ви хочете відсортувати, повинен реалізовувати інтерфейс Comparable. | Клас, об’єкти якого ви хочете відсортувати, не потребує реалізації інтерфейсу порівняння. |
Послідовності сортування | Він забезпечує одну послідовність сортування. | Він забезпечує кілька послідовностей сортування. |
Порядок сортування | Цей метод може сортувати дані відповідно до природного порядку сортування. | Цей метод сортує дані відповідно до налаштованого порядку сортування. |
Клас | Це впливає на початковий клас. тобто фактичний клас змінюється. | Це не впливає на вихідний клас, тобто фактичний клас не змінюється. |
Використання | Часто реалізується в API календарем, класами оболонки, датою та Рядок. |
Він реалізований для сортування екземплярів сторонніх класів. |
Здійснювати | Усі класи-огортки та класи рядків реалізують порівняльні інтерфейси. | Єдиними реалізованими класами Comparator є Collator і RuleBasedColator. |
Найкращі практики під час використання Comparator і Comparable в Java
- Використовуйте порівняльний інтерфейс, якщо порівняння є стандартним для конкретного класу.
- Ви можете використовувати лямбда-вирази з компаратором.
- Багато з доступних основних класів реалізують порівнянний інтерфейс.
- Можна використовувати TreeSet і TreeMap під час сортування Set або Map.
- Команда
compareTo()
метод працює як з компаратором, так і з компаратором. - Використовуйте інтерфейс компаратора лише тоді, коли вам < потрібна більша гнучкість.
- Команда
compareTo()
метод поверне додатне ціле число, якщо перший об’єкт більший за інший, від’ємне, якщо він нижчий, і нуль, якщо обидва однакові.
Як вибрати між порівнюваним і порівнюваним
Зрештою, мій практичний досвід показує, що використання Comparable і Comparator у Java значно покращує контроль над сортуванням даних, підвищуючи продуктивність і функціональність.