Огляд порівнянного в прикладі Java

Порівняльна в Java - інтерференція, яка використовується для порівняння поточних об'єктів з іншими об'єктами одного типу. Це порівняння може бути використане для сортування елементів колекції. Вам доведеться реалізувати інтерфейс у класі, щоб зробити його сортовим або “порівнянним”. Вам доведеться реалізувати лише один метод “порівняти до”. Таке впорядкування будь-якого типу називається природним упорядкуванням, а реалізований метод "Порівняння" називається природним методом порівняння. Тут, у цій зіставній статті на прикладі Java, ми розглянемо різні приклади порівнянних у Java.

Декларація:

Інтерфейс порівнянний

Для реалізації цього інтерфейсу необхідно реалізувати цей метод:

public int compareTo(To);

Параметри:

Т - тип об'єкта, з яким цей об'єкт порівнюється.

Повернене значення:

метод returnTo повертає 0, якщо об'єкт вказаний і цей об'єкт є рівним, повертає від'ємне ціле число, якщо цей об'єкт менший за вказаний об'єкт, і повертає додатне ціле число, якщо цей об'єкт більший за вказаний об'єкт.

Кидає:

ClasscastException - якщо об'єкт, переданий цьому методу, є нульовим

NullPointerException - Якщо об'єкт, переданий цьому методу, не сумісний з цим об'єктом.

Класи, що реалізують порівнянний інтерфейс, мають вказане з ними природне впорядкування, і тому їх можна сортувати безпосередньо у колекції або масивах, використовуючи Collections.sort () та Arrays.sort (). Крім того, вони можуть використовуватися як ключ у відсортованих картах та елементів у відсортованих наборах, не вказуючи компаратор окремо.

Давайте розберемося в порівнянному інтерфейсі за допомогою прикладу:

Приклад:

package comparableDemo;
import java.util.TreeSet;
public class Student implements Comparable (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public int compareTo(Student o) (
if (this.rollNo > o.rollNo) (
return 1;
) else if (this.rollNo == o.rollNo) (
return 0;
) else (
return -1;
)
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Вихід:

Пояснення

Це додаток для зберігання реквізитів учнів.

  • По-перше, ми створили клас «Студент» як представлення сутності Студент. Ми будемо зберігати основні деталі, такі як номер ролика, ім’я та вік студентів.
  • І вимога полягає в сортуванні списку учнів на основі кількості списку.
  • Для виконання цієї вимоги реалізується Порівняльний інтерфейс і порівнюється зі студентами на основі номера рулону, як ви можете бачити реалізацію методу "порівняння".
  • Тоді у нас є основний метод показати функціональність. Тут ми створили "TreeSet" і додали п'ять учнів, що мають випадкові номери рулонів. Ми використовували "TreeSet", оскільки він зберігає елементи в упорядкованому порядку.
  • Тепер, якщо переглядати список студентів, ви побачите, що студенти сортуються на основі номера списку. Ось яка наша вимога була!
  • Ми також могли б сортувати учнів на основі інших ознак, таких як ім’я чи вік. Для цього нам доведеться використовувати іменні або вікові змінні в методі «порівняння» замість «rollNo».

Приклад:

@Override
public int compareTo(Student o) (
if (this.age> o.age) (
return 1;
) else if (this.age == o.age) (
return 0;
) else (
return -1;
)
)
OR
@Override
public int compareTo(Student o) (
return this.name.compareTo(o.name);
)

Порівняно проти компаратора

Comparator - це також інтерфейс на зразок Comparable, який використовується для порівняння двох об'єктів типу. Різниця полягає в тому, що компаратор не реалізований у самому класі сутності. Ми повинні реалізувати його в іншому класі та чітко надати його примірник механізму сортування. Ми також можемо використовувати для цього анонімний екземпляр класу.

Наприклад, припустимо, що у нас є клас Студент без впровадження Порівняльного інтерфейсу:

package comparableDemo;
import java.util.TreeSet;
public class Student(
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Якщо ви спробуєте виконати цю програму, ви отримаєте такий виняток:

Тому що TreeSet потребує способу сортування елементів.

Щоб вирішити цю помилку, ми можемо використовувати компаратор, як реалізовано в цій програмі:

package comparableDemo;
import java.util.Comparator;
import java.util.TreeSet;
public class Student (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
Comparator studentComparator = new Comparator() (
@Override
public int compare(Student o1, Student o2) (
if (o1.rollNo < o2.rollNo) (
return -1;
) else if (o1.rollNo == o2.rollNo) (
return 0;
) else (
return 1;
)
)
);
TreeSet students = new TreeSet(studentComparator);
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Ви можете бачити, що інтерфейс Comparator реалізований в анонімному внутрішньому класі, а екземпляр надається TreeSet для сортування елементів. Тепер ви отримаєте належний вихід, як раніше.

Інтерфейс колекції на Java

Колекція - це кореневий інтерфейс у рамках колекцій. Він містить декларацію всіх методів загального призначення, що реалізуються у колекціях, таких як Списки та набори. Інтерфейс карт не розширює інтерфейс колекції, оскільки Map - це сукупність пар ключових значень, а не просто набір елементів. Деякі методи інтерфейсу Collection реалізовані в абстрактному класі “AbstractCollection”.

Цей інтерфейс не реалізується безпосередньо, а розширюється конкретними інтерфейсами, оскільки реалізація цих методів залежить від колекції. Наприклад, деяка колекція дозволяє повторювати елементи (Ex-List), тоді як деякі не (Ex-Set), деякі підтримують індексацію (Ex-List), а деякі - (Ex-Set).

Тут описані деякі важливі методи:

  1. Булева добавка (E e): Цей метод додає елемент до цієї колекції та повертає статус операції додавання.
  2. boolean addAll (Колекція c): Цей метод додає всі елементи із зазначеної колекції у цю колекцію та повертає статус операції додавання.
  3. void clear (): Цей метод видаляє всі елементи з цієї колекції.
  4. boolean містить (Object o): Цей метод перевіряє, чи вказаний елемент присутній у колекції чи ні. Повертає відповідно істинне чи помилкове.
  5. boolean містить (Колекція c): Цей метод перевіряє, чи всі елементи вказаної колекції присутні в цій колекції чи ні, і повертає відповідно істинно чи помилково.
  6. boolean isEmpty (): Цей метод перевіряє, чи колекція порожня чи ні, і відповідно повертає true чи false.
  7. Ітератор ітератора (): Цей метод повертає ітератор для цієї колекції. Ітератор використовується для перебору всіх елементів цієї колекції.
  8. boolean remove (Object o): Цей метод видаляє вказаний елемент із колекції та повертає стан операції видалення.
  9. boolean removeAll (Колекція c): Цей метод видаляє всі елементи з цієї колекції, які присутні у зазначеній колекції та цій колекції.
  10. boolean retainAll (Колекція c): Цей метод видаляє всі елементи з цієї колекції, які відсутні у зазначеній колекції та присутні в цій колекції.
  11. int size (): Цей метод повертає розмір цієї колекції.
  12. Object () toArray (): Це важливий метод, який формує та повертає масив, що містить усі елементи цієї колекції.
  13. T () toArray (T () a): Цей метод додає всі елементи цієї колекції у вказаний масив і повертає масив. Якщо розмір масиву менше розміру цієї колекції, то він створює новий масив типів, такий самий, як тип вказаного масиву, і повертає його. Якщо розмір вказаного масиву перевищує розмір цієї колекції, значення нуля встановлюється для решти елементів масиву і повертає масив.

Висновок - порівнянна в прикладі Java

Підводячи підсумок, інтерфейс Comparable in Java дуже корисний для порівняння об'єктів вручну, сортування колекцій та масивів або для сортування самої колекції. Ми також можемо сортувати елементи на основі різних атрибутів сутності. Не потрібно, але настійно рекомендується мати однаковий результат від рівних і метод "порівняння", щоб уникнути безладу в колекції, що використовує обидва ці методи.

Рекомендовані статті

Це посібник із Порівняльного в прикладі Java. Тут ми обговорюємо Вступ, порівнянне з прикладом Java, інтерфейс колекції на Java тощо. Ви також можете ознайомитись з іншими запропонованими нами статтями, щоб дізнатися більше -

  1. Сортування на Java
  2. Кращий Java IDE
  3. Послідовності в Python
  4. Функції рядка Oracle
  5. Повне керівництво по сортуванню в C # з прикладами
  6. Колекції PL / SQL | Синтаксис, типи, винятки