Обзор Comparable в примере Java

В Java можно сравнивать помехи, используемые для сравнения текущих объектов с другими объектами того же типа. Это сравнение может быть использовано для сортировки элементов в коллекции. Вам нужно будет реализовать интерфейс в классе, чтобы сделать его сортируемым или «сопоставимым». Вам нужно будет реализовать только один метод «CompareTo». Это упорядочение любого типа называется естественным упорядочением, а реализованный метод «CompareTo» называется методом естественного сравнения. Здесь, в этой статье «Пример для сравнения в Java», мы рассмотрим различные примеры сопоставимых в Java.

Декларация:

Сопоставимый интерфейс

Чтобы реализовать этот интерфейс, вы должны реализовать этот метод:

public int compareTo(To);

Параметры:

T - тип объекта, с которым этот объект сравнивается.

Возвращаемое значение:

Метод compareTo возвращает 0, если указанный объект и этот объект равны, возвращает отрицательное целое число, если этот объект меньше указанного объекта, и возвращает положительное целое число, если этот объект больше указанного объекта.

Броски:

ClasscastException - Если объект, переданный этому методу, является нулем

NullPointerException - Если объект, переданный этому методу, не совместим с этим объектом.

Классы, которые реализуют интерфейс Comparable, имеют свой естественный порядок, указанный в них, и поэтому они могут быть отсортированы непосредственно в Collection или Arrays с использованием Collections.sort () и Arrays.sort (). Кроме того, они могут использоваться в качестве ключа в отсортированных картах и ​​элементах в отсортированных наборах без указания Comparator отдельно.

Давайте разберемся с интерфейсом Comparable на примере:

Пример:

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);
)
)
)

Выход:

объяснение

Это приложение для хранения информации о студентах.

  • Сначала мы создали класс «Студент» как представление сущности Студент. Мы собираемся хранить основные данные, такие как номер рулона, имя и возраст студентов.
  • И требование состоит в том, чтобы отсортировать список студентов по номеру рулона.
  • Для выполнения этого требования реализован интерфейс Comparable, который сравнивается со студентами по номеру броска, поскольку вы можете увидеть реализацию метода «CompareTo».
  • Тогда у нас есть основной метод, чтобы показать функциональность. Здесь мы создали «TreeSet» и добавили пять учеников со случайными номерами бросков. Мы использовали «TreeSet», потому что он хранит элементы в отсортированном порядке.
  • Теперь, если вы перебираете список студентов, вы обнаружите, что студенты сортируются по номеру броска. Это то, что наше требование было!
  • Мы также могли бы сортировать студентов на основе других атрибутов, таких как имя или возраст. Для этого нам потребуется использовать переменные name или age в методе «CompareTo» вместо «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, который используется для сравнения двух объектов типа. Разница в том, что Comparator не реализован в самом классе сущностей. Мы должны реализовать его в другом классе и явно передать его экземпляр механизму сортировки. Для этой цели мы также можем использовать экземпляр анонимного класса.

Например, предположим, что у нас есть класс Student без реализации интерфейса 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 нужен способ сортировки элементов.

Чтобы устранить эту ошибку, мы можем использовать Comparator, как это реализовано в этой программе:

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, поскольку Map - это набор пар ключ-значение, а не просто набор элементов. Некоторые из методов интерфейса Collection реализованы в абстрактном классе «AbstractCollection».

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

Некоторые важные методы описаны здесь:

  1. Boolean add (E e): этот метод добавляет элемент в эту коллекцию и возвращает статус операции добавления.
  2. boolean addAll (Collection c): этот метод добавляет все элементы из указанной коллекции в эту коллекцию и возвращает статус операции добавления.
  3. void clear (): этот метод удаляет все элементы из этой коллекции.
  4. boolean содержит (объект o): этот метод проверяет, присутствует ли указанный элемент в коллекции или нет. Возвращает true или false соответственно.
  5. логическое содержит (Коллекция c): этот метод проверяет, присутствуют ли все элементы из указанной коллекции в этой коллекции или нет, и возвращает соответственно значение true или false.
  6. boolean isEmpty (): Этот метод проверяет, является ли коллекция пустой или нет, и возвращает соответственно значение true или false.
  7. Iterator iterator (): этот метод возвращает итератор для этой коллекции. Итератор используется для перебора всех элементов этой коллекции.
  8. boolean remove (Object o): Этот метод удаляет указанный элемент из коллекции и возвращает статус операции удаления.
  9. boolean removeAll (Collection c): этот метод удаляет все элементы из этой коллекции, которые присутствуют в указанной коллекции и этой коллекции.
  10. boolean retainAll (Collection c): этот метод удаляет все элементы из этой коллекции, которые отсутствуют в указанной коллекции и присутствуют в этой коллекции.
  11. int size (): этот метод возвращает размер этой коллекции.
  12. Object () toArray (): это важный метод, который формирует и возвращает массив, содержащий все элементы этой коллекции.
  13. T () toArray (T () a): этот метод добавляет все элементы этой коллекции в указанный массив и возвращает массив. Если размер массива меньше размера этой коллекции, он создает новый массив типов, совпадающий с типом указанного массива, и возвращает его. Если размер указанного массива больше, чем размер этой коллекции, нулевое значение устанавливается для оставшихся элементов в массиве и возвращает массив.

Вывод - сопоставимый в примере Java

Подводя итог, интерфейс Comparable in Java очень полезен для сравнения объектов вручную, сортировки коллекций и массивов или для сортировки самой коллекции. Мы также можем сортировать элементы на основе различных атрибутов объекта. Не обязательно, но настоятельно рекомендуется иметь одинаковый результат от equals и метода «CompareTo», чтобы избежать путаницы в коллекции, которая использует оба этих метода.

Рекомендуемые статьи

Это руководство по Comparable в примере Java. Здесь мы обсуждаем пример «Введение в Java», интерфейс «Коллекция» в Java и т. Д. Вы также можете ознакомиться с другими нашими предлагаемыми статьями, чтобы узнать больше -

  1. Сортировка в Java
  2. Лучший Java IDE
  3. Последовательности в Python
  4. Строковые функции Oracle
  5. Полное руководство по сортировке в C # с примерами
  6. Коллекции PL / SQL | Синтаксис, Типы, Исключения