Comparable: Природне Впорядкування Даних
У Java часто виникає потреба сортувати об'єкти. Наприклад, у списку книг може знадобитися сортування за назвою, автором або роком видання.
Для вирішення таких завдань Java надає інтерфейси Comparable та Comparator. Обидва вони призначені для сортування об'єктів, але реалізують це різними способами. Розглянемо їх окремо.
Що таке Comparable?
Наприклад, Java-рядки за замовчуванням сортуються алфавітно, оскільки клас String реалізує інтерфейс Comparable.
Ключовий метод у функціональному інтерфейсі Comparable:
int compareTo(T o);
Цей метод повертає:
- Від’ємне число, якщо поточний об'єкт менший за заданий об'єкт;
- Нуль, якщо об'єкти рівні;
- Додатне число, якщо поточний об'єкт більший за заданий об'єкт.
Приклад: Сортування книг за роком видання
Припустимо, потрібно порівнювати об'єкти Book за роком публікації.
Для цього клас Book може реалізувати інтерфейс Comparable і перевизначити метод compareTo. Перевизначаючи цей метод, ви визначаєте, як об'єкти Book мають порівнюватися, що безпосередньо впливає на поведінку сортування у таких методах, як Collections.sort().
Це дозволяє контролювати порядок сортування книг — за зростанням або за спаданням — відповідно до логіки, яку ви реалізуєте у compareTo.
Main.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }
Коли викликається Collections.sort(books), Java перебирає список, порівнюючи елементи за допомогою методу compareTo, визначеного у класі Book.
Для кожного порівняння compareTo повертає числове значення, яке визначає порядок двох книг. Виходячи з цих значень, алгоритм сортування переставляє елементи так, щоб вони були впорядковані за зростанням року публікації.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you show an example of how to implement Comparable in a Book class?
What happens if two books have the same publication year?
How does Comparable differ from Comparator?
Awesome!
Completion rate improved to 2.33
Comparable: Природне Впорядкування Даних
Свайпніть щоб показати меню
У Java часто виникає потреба сортувати об'єкти. Наприклад, у списку книг може знадобитися сортування за назвою, автором або роком видання.
Для вирішення таких завдань Java надає інтерфейси Comparable та Comparator. Обидва вони призначені для сортування об'єктів, але реалізують це різними способами. Розглянемо їх окремо.
Що таке Comparable?
Наприклад, Java-рядки за замовчуванням сортуються алфавітно, оскільки клас String реалізує інтерфейс Comparable.
Ключовий метод у функціональному інтерфейсі Comparable:
int compareTo(T o);
Цей метод повертає:
- Від’ємне число, якщо поточний об'єкт менший за заданий об'єкт;
- Нуль, якщо об'єкти рівні;
- Додатне число, якщо поточний об'єкт більший за заданий об'єкт.
Приклад: Сортування книг за роком видання
Припустимо, потрібно порівнювати об'єкти Book за роком публікації.
Для цього клас Book може реалізувати інтерфейс Comparable і перевизначити метод compareTo. Перевизначаючи цей метод, ви визначаєте, як об'єкти Book мають порівнюватися, що безпосередньо впливає на поведінку сортування у таких методах, як Collections.sort().
Це дозволяє контролювати порядок сортування книг — за зростанням або за спаданням — відповідно до логіки, яку ви реалізуєте у compareTo.
Main.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344package com.example; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args) { List<Book> books = new ArrayList<>(); books.add(new Book("Book A", "Author X", 2020)); books.add(new Book("Book B", "Author Y", 2018)); books.add(new Book("Book C", "Author Z", 2021)); Collections.sort(books); // Uses `compareTo` System.out.println(books); } } class Book implements Comparable<Book> { private String title; private String author; private int year; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; } public int getYear() { return year; } @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); // Compare by publication year } @Override public String toString() { return title + " (" + year + ")"; } }
Коли викликається Collections.sort(books), Java перебирає список, порівнюючи елементи за допомогою методу compareTo, визначеного у класі Book.
Для кожного порівняння compareTo повертає числове значення, яке визначає порядок двох книг. Виходячи з цих значень, алгоритм сортування переставляє елементи так, щоб вони були впорядковані за зростанням року публікації.
Дякуємо за ваш відгук!