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:
- Boolean add (E e): Tato metoda přidá prvek do této kolekce a vrátí stav operace add.
- 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í.
- void clear (): Tato metoda odstraní všechny prvky z této kolekce.
- boolean obsahuje (Object o): Tato metoda zkontroluje, zda je zadaný prvek přítomen v kolekci nebo ne. Vrací pravdivě nebo nepravdivě.
- 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.
- boolean isEmpty (): Tato metoda zkontroluje, zda je kolekce prázdná nebo ne, a podle toho vrací true nebo false.
- Iterator iterator (): Tato metoda vrací iterátor pro tuto kolekci. Iterátor se používá k iteraci všemi prvky v této kolekci.
- boolean remove (Object o): Tato metoda odstraní určený prvek ze sbírky a vrátí stav operace odebrání.
- 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.
- 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.
- int size (): Tato metoda vrací velikost této kolekce.
- Object () toArray (): Toto je důležitá metoda, která vytváří a vrací matici obsahující všechny prvky této kolekce.
- 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 -
- Třídění v Javě
- Nejlepší Java IDE
- Sekvence v Pythonu
- Funkce Oracle String
- Kompletní průvodce tříděním v C # s příklady
- Kolekce PL / SQL | Syntaxe, typy, výjimky