Přehled srovnatelných v příkladu Java

Srovnatelný v Javě je rušení používané k porovnání současných objektů s jinými objekty stejného typu. Toto srovnání lze použít k třídění prvků v kolekci. Budete muset implementovat rozhraní do třídy, aby bylo roztrhané nebo „srovnatelné“. Budete muset implementovat pouze jednu metodu „CompareTo“. Toto uspořádání jakéhokoli typu se nazývá přirozené uspořádání a implementovaná metoda „CompareTo“ se nazývá metoda přirozeného porovnání. Zde v tomto článku Srovnatelný v jazyce Java se podíváme na různé příklady srovnatelných v jazyce Java.

Prohlášení:

Rozhraní srovnatelné

Chcete-li implementovat toto rozhraní, musíte implementovat tuto metodu:

public int compareTo(To);

Parametry:

T - je typ objektu, se kterým je tento objekt porovnáván.

Návratová hodnota:

Metoda CompareTo vrátí 0, pokud je zadaný objekt a tento objekt jsou stejné, vrátí záporné celé číslo, pokud je tento objekt menší než zadaný objekt, a vrací kladné celé číslo, pokud je tento objekt větší než určený objekt.

Hodí:

ClasscastException - Pokud je objekt předaný této metodě null

NullPointerException - Pokud objekt předaný této metodě není s tímto objektem kompatibilní.

Třídy, které implementují srovnatelné rozhraní, mají s nimi specifikovány své přirozené řazení, takže je lze třídit přímo do kolekce nebo polí pomocí kolekce.sort () a Arrays.sort (). Mohou být také použity jako klíč v seřazených mapách a prvcích v seřazených sadách, aniž by bylo nutné specifikovat komparátor zvlášť.

Pojďme porozumět srovnatelnému rozhraní pomocí příkladu:

Příklad:

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

Výstup:

Vysvětlení

Toto je aplikace pro ukládání podrobností o studentovi.

  • Nejprve jsme vytvořili třídu „Student“ jako reprezentaci entity Student. Budeme ukládat základní údaje, jako je číslo role, jméno a věk studentů.
  • Požadavkem je třídění seznamu studentů podle počtu žáků.
  • Pro splnění tohoto požadavku je implementováno srovnatelné rozhraní a porovnáno se studenty na základě počtu rolí, jak vidíte implementaci metody „porovnávat“.
  • Pak máme hlavní metodu, abychom ukázali funkčnost. Zde jsme vytvořili „TreeSet“ a přidali jsme pět studentů, kteří mají náhodná čísla. Použili jsme „TreeSet“, protože ukládá prvky v seřazeném pořadí.
  • Nyní, pokud iterujete seznamem studentů, zjistíte, že studenti jsou seřazeny podle počtu rolí. To byl náš požadavek!
  • Mohli bychom také třídit studenty podle jiných atributů, jako je jméno nebo věk. Abychom to mohli udělat, budeme muset použít metodu jména nebo věku v metodě „CompareTo“ namísto „rollNo“.

Příklad:

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

Srovnatelné vs komparátor

Srovnávač je také rozhraní jako Srovnatelné, které se používá pro porovnávání dvou objektů typu. Rozdíl je v tom, že komparátor není implementován do samotné třídy entit. Musíme ji implementovat do jiné třídy a explicitně ji poskytnout třídícímu mechanismu. K tomuto účelu můžeme také použít anonymní instanci třídy.

Předpokládejme například, že máme studentskou třídu bez implementace srovnatelného rozhraní:

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

Pokud se pokusíte spustit tento program, dostanete tuto výjimku:

Protože TreeSet potřebuje způsob řazení prvků.

K vyřešení této chyby můžeme použít nástroj Porovnávač implementovaný v tomto programu:

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

Můžete vidět, že rozhraní komparátoru je implementováno v anonymní vnitřní třídě a instance je poskytována TreeSet pro třídění prvků. Nyní získáte správný výstup jako dříve.

Sběrné rozhraní v Javě

Kolekce je kořenovým rozhraním v rámci kolekce. Obsahuje prohlášení o všech obecných metodách, které jsou implementovány do sbírek, jako jsou seznamy a sady. Rozhraní mapy nerozšiřuje rozhraní Collection, protože Map je kolekce párů klíč-hodnota a ne pouze kolekce prvků. Některé metody rozhraní kolekce jsou implementovány do abstraktní třídy „AbstractCollection“.

Toto rozhraní není přímo implementováno, ale rozšířeno o specifická rozhraní, protože implementace těchto metod je specifická pro kolekci. Například, některá kolekce umožňuje duplicitní prvky (Ex-List), zatímco některé ne (Ex-Set), některé udržují indexování (Ex-List), zatímco některé ne (Ex-Set).

Zde jsou popsány některé důležité metody:

  1. Boolean add (E e): Tato metoda přidá prvek do této kolekce a vrátí stav operace add.
  2. boolean addAll (Collection c): Tato metoda přidá do této kolekce všechny prvky ze zadané kolekce a vrátí stav operace přidání.
  3. void clear (): Tato metoda odstraní všechny prvky z této kolekce.
  4. boolean obsahuje (Object o): Tato metoda zkontroluje, zda je zadaný prvek přítomen v kolekci nebo ne. Vrací pravdivě nebo nepravdivě.
  5. boolean obsahuje (Collection c): Tato metoda zkontroluje, zda jsou v této kolekci přítomny všechny prvky zadané kolekce, a podle toho vrací true nebo false.
  6. boolean isEmpty (): Tato metoda zkontroluje, zda je kolekce prázdná nebo ne, a podle toho vrací true nebo false.
  7. Iterator iterator (): Tato metoda vrací iterátor pro tuto kolekci. Iterátor se používá k iteraci všemi prvky v této kolekci.
  8. boolean remove (Object o): Tato metoda odstraní určený prvek ze sbírky a vrátí stav operace odebrání.
  9. boolean removeAll (Collection c): Tato metoda odstraní všechny prvky z této kolekce, které jsou přítomny v určené kolekci a této kolekci.
  10. boolean keepAll (Collection c): Tato metoda odstraní všechny prvky z této kolekce, které nejsou přítomny v určené kolekci a nejsou v této kolekci přítomny.
  11. int size (): Tato metoda vrací velikost této kolekce.
  12. Object () toArray (): Toto je důležitá metoda, která vytváří a vrací matici obsahující všechny prvky této kolekce.
  13. T () toArray (T () a): Tato metoda přidá všechny prvky této kolekce do určeného pole a vrátí pole. Pokud je velikost pole menší než velikost této kolekce, vytvoří nové pole typů stejné jako typ zadaného pole a vrátí jej. Pokud je velikost zadaného pole větší než velikost této kolekce, je pro zbývající prvky v poli nastavena nulová hodnota a pole vrátí.

Závěr - srovnatelný v příkladu Java

Abychom to shrnuli, rozhraní Srovnatelné v Javě je velmi užitečné pro ruční porovnávání objektů, třídění kolekcí a polí nebo samotné třídění kolekcí. Můžeme také třídit prvky na základě různých atributů entity. Není nutné, ale vysoce se doporučuje mít stejný výsledek z rovnání a metody „CompareTo“, aby se zabránilo nepořádku ve sbírce, která používá obě tyto metody.

Doporučené články

Toto je průvodce srovnatelným příkladem Java. Zde diskutujeme Úvod srovnatelný v příkladu Java, rozhraní kolekce v Javě atd. Další informace naleznete také v našich dalších doporučených článcích -

  1. Třídění v Javě
  2. Nejlepší Java IDE
  3. Sekvence v Pythonu
  4. Funkce Oracle String
  5. Kompletní průvodce tříděním v C # s příklady
  6. Kolekce PL / SQL | Syntaxe, typy, výjimky

Kategorie: