Omówienie porównywalnego przykładu w Javie

Porównywalny w Javie to interferencja używana do porównywania bieżących obiektów z innymi obiektami tego samego typu. Tego porównania można użyć do sortowania elementów w kolekcji. Będziesz musiał zaimplementować interfejs w klasie, aby był on sortowalny lub „porównywalny”. Będziesz musiał zaimplementować tylko jedną metodę „CompareTo”. To uporządkowanie dowolnego typu nazywa się naturalnym porządkiem, a zaimplementowana metoda „CompareTo” nazywa się naturalną metodą porównania. Tutaj w tym artykule Porównywalny w Javie przyjrzymy się różnym przykładom porównywalnego w Javie.

Deklaracja:

Interfejs porównywalny

Aby wdrożyć ten interfejs, musisz zaimplementować tę metodę:

public int compareTo(To);

Parametry:

T - jest rodzajem obiektu, z którym ten obiekt jest porównywany.

Zwracana wartość:

Metoda CompareTo zwraca 0, jeśli określony obiekt i ten obiekt są równe, zwraca ujemną liczbę całkowitą, jeśli ten obiekt jest mniejszy niż określony obiekt, i zwraca dodatnią liczbę całkowitą, jeśli ten obiekt jest większy niż określony obiekt.

Rzuty:

ClasscastException - Jeśli obiekt przekazany do tej metody ma wartość NULL

NullPointerException - Jeśli obiekt przekazany do tej metody nie jest zgodny z tym obiektem.

Klasy, które implementują interfejs porównywalny, mają określoną naturalną kolejność, dzięki czemu można je sortować bezpośrednio w kolekcji lub tablicach za pomocą kolekcji.sort () i tablic.sort (). Można ich również używać jako klucza w posortowanych mapach i elementach w posortowanych zestawach bez osobnego określania Komparatora.

Rozumiemy interfejs porównywalny za pomocą przykładu:

Przykład:

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

Wynik:

Wyjaśnienie

Jest to aplikacja do przechowywania danych ucznia.

  • Najpierw stworzyliśmy klasę „Student” jako reprezentację bytu Student. Będziemy przechowywać podstawowe dane, takie jak numer rolki, nazwisko i wiek uczniów.
  • Wymagane jest posortowanie listy studentów na podstawie numeru rzutu.
  • Aby spełnić to wymaganie, interfejs porównywalny został zaimplementowany i porównany z uczniami opartymi na liczbie rzutów, jak widać wdrożenie metody „CompareTo”.
  • Następnie mamy główną metodę pokazania funkcjonalności. Tutaj stworzyliśmy „TreeSet” i dodaliśmy pięciu uczniów posiadających losowe numery rzutów. Użyliśmy „TreeSet”, ponieważ przechowuje elementy w posortowanej kolejności.
  • Teraz, jeśli przejdziesz przez listę studentów, przekonasz się, że studenci są sortowani według liczby rzutów. Taki był nasz wymóg!
  • Możemy również posortować uczniów według innych atrybutów, takich jak imię lub wiek. Aby to zrobić, będziemy musieli użyć zmiennych imienia lub wieku w metodzie „CompareTo” zamiast „rollNo”.

Przykład:

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

Porównywalny vs Komparator

Komparator jest także interfejsem podobnym do porównywalnego, który służy do porównywania dwóch obiektów danego typu. Różnica polega na tym, że Komparator nie jest zaimplementowany w samej klasie encji. Musimy zaimplementować go w innej klasie i jawnie przekazać instancję mechanizmu sortowania. W tym celu możemy również użyć anonimowej instancji klasy.

Załóżmy na przykład, że mamy klasę Student bez implementacji porównywalnego interfejsu:

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

Jeśli spróbujesz uruchomić ten program, otrzymasz ten wyjątek:

Ponieważ TreeSet potrzebuje sposobu na sortowanie elementów.

Aby rozwiązać ten błąd, możemy użyć Komparatora zaimplementowanego w tym programie:

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

Widać, że interfejs komparatora jest zaimplementowany w anonimowej klasie wewnętrznej, a instancja jest dostarczana do TreeSet w celu sortowania elementów. Teraz otrzymasz prawidłowe wyjście, jak wcześniej.

Interfejs kolekcji w Javie

Kolekcja jest interfejsem głównym w ramach kolekcji. Zawiera deklarację wszystkich metod ogólnego zastosowania zaimplementowanych w kolekcjach takich jak Listy i Zestawy. Interfejs mapy nie rozszerza interfejsu kolekcji, ponieważ mapa to zbiór par klucz-wartość, a nie tylko zbiór elementów. Niektóre metody interfejsu Collection są zaimplementowane w klasie abstrakcyjnej „AbstractCollection”.

Interfejs ten nie jest bezpośrednio implementowany, ale rozszerzony o określone interfejsy, ponieważ implementacja tych metod jest specyficzna dla kolekcji. Na przykład niektóre zbiory pozwalają na duplikowanie elementów (lista Ex), podczas gdy niektóre nie (Ex-Set), niektóre utrzymują indeksowanie (Ex-List), a niektóre nie (Ex-Set).

Oto niektóre ważne metody:

  1. Boolean add (E e): Ta metoda dodaje element do tej kolekcji i zwraca status operacji dodawania.
  2. boolean addAll (kolekcja c): Ta metoda dodaje wszystkie elementy z określonej kolekcji do tej kolekcji i zwraca status operacji dodawania.
  3. void clear (): Ta metoda usuwa wszystkie elementy z tej kolekcji.
  4. boolean zawiera (Obiekt o): Ta metoda sprawdza, czy określony element jest obecny w kolekcji, czy nie. Zwraca odpowiednio wartość prawda lub fałsz.
  5. boolean zawiera (Kolekcja c): Ta metoda sprawdza, czy wszystkie elementy z określonej kolekcji znajdują się w tej kolekcji, czy nie, i odpowiednio zwraca wartość true lub false.
  6. boolean isEmpty (): Ta metoda sprawdza, czy kolekcja jest pusta, czy nie i odpowiednio zwraca true lub false.
  7. Iterator iterator (): Ta metoda zwraca iterator dla tej kolekcji. Iterator służy do iteracji wszystkich elementów tej kolekcji.
  8. boolean remove (Object o): Ta metoda usuwa określony element z kolekcji i zwraca status operacji remove.
  9. boolean removeAll (kolekcja c): Ta metoda usuwa wszystkie elementy z tej kolekcji, które są obecne w określonej kolekcji i tej kolekcji.
  10. boolean retainAll (kolekcja c): Ta metoda usuwa wszystkie elementy z tej kolekcji, które nie są obecne w określonej kolekcji i są obecne w tej kolekcji.
  11. int size (): Ta metoda zwraca rozmiar tej kolekcji.
  12. Object () toArray (): Jest to ważna metoda, która tworzy i zwraca tablicę zawierającą wszystkie elementy tej kolekcji.
  13. T () toArray (T () a): Ta metoda dodaje wszystkie elementy tej kolekcji do określonej tablicy i zwraca tablicę. Jeśli rozmiar tablicy jest mniejszy niż rozmiar tej kolekcji, wówczas tworzona jest nowa tablica typów identyczna z typem określonej tablicy i zwraca ją. Jeśli rozmiar określonej tablicy jest większy niż rozmiar tej kolekcji, wartość null jest ustawiana dla pozostałych elementów w tablicy i zwraca tablicę.

Wniosek - porównywalny w przykładzie Java

Podsumowując, interfejs porównywalny w Javie jest bardzo przydatny do ręcznego porównywania obiektów, sortowania kolekcji i tablic lub do sortowania samej kolekcji. Możemy również sortować elementy na podstawie różnych atrybutów bytu. Nie jest wymagane, ale wysoce zalecane jest, aby uzyskać ten sam wynik z równości i metody „CompareTo”, aby uniknąć bałaganu w kolekcji, która korzysta z obu tych metod.

Polecane artykuły

Jest to przewodnik po porównywalnym przykładzie w Javie. Tutaj omawiamy wprowadzenie Porównywalne w języku Java Przykład, interfejs kolekcji w Javie itp. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. Sortowanie w Javie
  2. Najlepsze IDE Java
  3. Sekwencje w Pythonie
  4. Funkcje ciągów Oracle
  5. Kompletny przewodnik po sortowaniu w C # z przykładami
  6. Kolekcje PL / SQL | Składnia, typy, wyjątki