Comparable і comparator є інтерфейсами Java, мови програмування високого рівня, яка використовується для сортування елементів колекції. Java в основному надає ці два різні інтерфейси для сортування об’єктів.
Існує багато помітних відмінностей між обома інтерфейсами, які створюють межу між ними на основі функції, яку вони виконують.
Ключові винесення
- Comparable — це інтерфейс для природного впорядкування об’єктів; Компаратор — зовнішня утиліта для порівняння об'єктів.
- Реалізація Comparable вимагає модифікації класу порівнюваних об’єктів; Компаратор можна використовувати без зміни вихідного класу.
- Comparable накладає єдиний стандартний метод сортування; Компаратор надає кілька настроюваних параметрів сортування.
Comparable vs Comparator
Comparable — це інтерфейс у Java, який визначає метод compareTo і використовується для порівняння природно впорядкованих об’єктів. Він порівнює об’єкти за допомогою посилання «this». Інтерфейс компаратора сортує об’єкти, враховуючи їхні атрибути. Він розглядає об'єкти двох різних класів.
Comparable — це інтерфейс, який присутній у пакеті lang мови Java, і його мета — сортувати елементи колекції за допомогою лише одного атрибута, наприклад віку, ціни, ідентифікатора, імені тощо.
Він здатний порівнювати себе з будь-яким іншим об'єктом. Об’єкт будь-якого типу, будь то список або масив, можна сортувати.
Компаратор — це інтерфейс, який присутній у пакеті util мови Java, і його мета — сортувати елементи колекції за допомогою кількох атрибутів одночасно.
Це окремий клас і є зовнішнім щодо типу елемента, який порівнюється. Клас колекцій забезпечує другий метод сортування, який приймає компаратор як параметр.
Таблиця порівняння
Параметри порівняння | Порівнюваний | компаратор |
---|---|---|
Тип сортування | Він забезпечує єдину послідовність сортування. | Він забезпечує кілька послідовностей сортування. |
Модифікація класу | Він змінює фактичний клас. | Це не змінює фактичний клас. |
Розташування упаковки | Він присутній у пакеті java—lang. | Він присутній в java. службовий пакет. |
Методи | Він має метод compareTo(). | Він має метод compare(). |
Методи сортування | Метод Collections.sort(List). | Метод Collections.sort(List,Comparator). |
Що таке Comparable?
Як обговорювалося вище, comparable — це інтерфейс мови програмування Java, який присутній у пакеті lang і використовується для сортування елементів колекції за допомогою лише одного атрибута. Порівняльний інтерфейс містить лише один метод compareTo().
Порівнюваний об'єкт здатний порівнювати з іншими об'єктами. Щоб клас міг порівнювати екземпляри, необхідно, щоб клас реалізував інтерфейс Comparable.
Подібний інтерфейс був розроблений для об'єктів з природним упорядкуванням. Іншими словами, це означає, що об'єкт, який потрібно відсортувати, повинен мати порядок, у якому він має бути відсортований.
Логічно кажучи, порівняльний інтерфейс порівнює «це» посилання з об’єктом, згаданим у методі. Коли будь-який клас реалізує інтерфейс Comparable, об’єкт цього класу можна сортувати за допомогою колекцій. sort() або масиви. метод sort().
Об’єкти будуть автоматично відсортовані в природному порядку, визначеному методом CompareTo. Можна порівнювати числа, рядки та багато інших типів. Рядки можна порівнювати за допомогою алфавітного порівняння.
Різні вбудовані класи Java реалізують порівняльний інтерфейс. Найважливіше, що слід мати на увазі, це те, що порівняльний інтерфейс можна використовувати лише для порівняння об’єктів одного класу.
Що таке компаратор?
Інтерфейс компаратора мови програмування Java присутній в пакеті util і використовується для сортування колекції на основі кількох атрибутів одночасно.
Компаратор — це зовсім окремий клас. Програмісти використовують для створення кількох класів, які реалізують інтерфейс компаратора з метою порівняння різних об’єктів.
Щоб порівняти будь-який об’єкт колекції, першим кроком є створення класу, що реалізує метод компаратора, який містить метод compare(). Наступним кроком є створення екземпляра цього класу, який реалізує інтерфейс компаратора.
Останнім кроком є виклик перевантаженого методу, яким є метод sort(), а потім призначення списку та екземпляра класу, створеного на попередньому кроці.
Інтерфейс компаратора порівнює два об'єкти різних класів. Інтерфейс Comparator містить два методи: метод compare() і метод equals().
Метод compare() приймає два різні об’єкти як параметр для порівняння, а метод equals() визначає, чи є об’єкт Пройшов дорівнює викликаючому компаратору.
Метод equals() повертає логічне значення як вихід. True повертається, коли об’єкт проходить, а викликаючий об’єкт є компараторами, а якщо ні, то повертається false.
Метод compare() повертає ціле значення у вихідних даних, що вказує на більший з двох переданих об’єктів.
Основні відмінності між Comparable і Comparator
- Інтерфейс Comparable забезпечує єдине сортування послідовність у якому колекція може бути відсортована за одним елементом, таким як ідентифікатор, ім’я або будь-який конкретний параметр, тоді як інтерфейс компаратора забезпечує багаторазову послідовність сортування, у якій колекція може бути відсортована за кількома елементами, такими як ідентифікатор, ім’я чи будь-який інший параметр .
- Інтерфейс порівняння впливає на вихідний клас, оскільки він модифікує фактичний клас, тоді як, з іншого боку, інтерфейс порівняння жодним чином не впливає на вихідний клас, оскільки фактичний клас залишається тим самим без будь-яких змін.
- Подібний інтерфейс присутній у пакеті lang Java, тоді як інтерфейс порівняння присутній у пакеті util Java.
- В інтерфейсі порівняння метод compareTo() використовується для сортування елементів, тоді як в інтерфейсі порівняння метод compare() використовується для сортування елементів.
- Елементи списку зіставних типів колекції можна сортувати за допомогою колекцій. Метод сортування (список), тоді як, з іншого боку, елементи списку типу компаратора колекції можна сортувати за допомогою колекцій. Метод сортування (список, компаратор).
- https://dom-pubs.onlinelibrary.wiley.com/doi/abs/10.1111/j.1463-1326.2011.01545.x
- https://journals.asm.org/doi/abs/10.1128/aac.47.6.1824-1831.2003
- https://ieeexplore.ieee.org/abstract/document/6042862/
Останнє оновлення: 17 липня 2023 р
Сандіп Бхандарі отримав ступінь бакалавра комп’ютерної техніки в Університеті Тапар (2006). Має 20 років досвіду роботи в технологічній сфері. Він має великий інтерес до різних технічних галузей, включаючи системи баз даних, комп'ютерні мережі та програмування. Ви можете прочитати більше про нього на його біо сторінка.
Ключові відмінності, які ви вказали між інтерфейсами Comparable і Comparator, дуже інформативні та допомагають зрозуміти відмінності між ними. Ваше пояснення того, як інтерфейс Comparable автоматично сортує об’єкти в природному порядку, визначеному методом compareTo, є особливо повчальним.
Дякуємо за деталізацію логіки інтерфейсів Comparable і Comparator. Ця інформація, безсумнівно, допоможе ефективніше запровадити механізми сортування.
Я згоден, у статті наведено чітке та стисле порівняння інтерфейсів Comparable та Comparator, що полегшує розуміння їхніх унікальних функцій і випадків використання.
Розбивка інтерфейсів Comparable і Comparator і їх відмінних особливостей є дуже пізнавальною. Ваше вичерпне пояснення призначення та використання цих інтерфейсів, безсумнівно, допоможе розробникам приймати зважені дизайнерські рішення.
Я ціную наведене тут детальне порівняння. Це цінна інформація для розробників, які хочуть покращити своє розуміння методів сортування та порівняння в Java.