Prehľad porovnateľného príkladu v jazyku Java

Porovnateľné v Jave je interferencia používaná na porovnávanie súčasných objektov s inými objektmi rovnakého typu. Toto porovnanie sa dá použiť na zoradenie prvkov v kolekcii. Budete musieť implementovať rozhranie do triedy, aby bolo rozmazané alebo „porovnateľné“. Budete musieť implementovať iba jednu metódu „CompareTo“. Toto usporiadanie ľubovoľného typu sa nazýva prirodzené usporiadanie a implementovaná metóda „porovnaj“ sa nazýva prirodzená porovnávacia metóda. Tu v tomto článku Porovnateľná v jazyku Java sa pozrieme na rôzne príklady porovnateľnej javy.

vyhlásenie:

Rozhranie porovnateľné

Ak chcete implementovať toto rozhranie, musíte implementovať túto metódu:

public int compareTo(To);

parametre:

T - je typ objektu, s ktorým je tento objekt porovnávaný.

Návratová hodnota:

Metóda CompareTo vráti 0, ak je zadaný objekt a tento objekt je rovnaký, vráti záporné celé číslo, ak je tento objekt menší ako zadaný objekt, a vráti kladné celé číslo, ak je tento objekt väčší ako zadaný objekt.

hody:

ClasscastException - Ak je objekt odovzdaný tejto metóde null

NullPointerException - Ak objekt odovzdaný tejto metóde nie je kompatibilný s týmto objektom.

Triedy, ktoré implementujú porovnateľné rozhranie, majú s nimi špecifikované svoje prirodzené usporiadanie, takže ich môžete triediť priamo v kolekcii alebo poliach pomocou kolekcií Collections.sort () a Arrays.sort (). Môžu byť tiež použité ako kľúč v triedených mapách a prvkoch v triedených množinách bez toho, aby ste osobitne uviedli porovnávač.

Poďme pochopiť porovnateľné rozhranie pomocou príkladu:

Prí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ýkon:

vysvetlenie

Toto je aplikácia na ukladanie detailov študentov.

  • Najprv sme vytvorili triedu „Študent“ ako reprezentáciu entity Študent. Budeme ukladať základné údaje, ako je číslo, meno a vek študentov.
  • Požiadavkou je zoradiť zoznam študentov podľa počtu žiakov.
  • Aby sa splnila táto požiadavka, implementuje sa porovnateľné rozhranie a porovnáva sa so študentmi na základe čísla v rolách, ako vidíte implementáciu metódy „porovnaj“.
  • Potom máme hlavnú metódu ukázania funkčnosti. Tu sme vytvorili „TreeSet“ a pridali sme päť študentov s náhodnými číslami. Použili sme „TreeSet“, pretože ukladá prvky v usporiadanom poradí.
  • Ak teraz iterujete zoznamom študentov, zistíte, že študenti sú zoradení podľa počtu rolí. To bola naša požiadavka!
  • Študentov by sme mohli zoradiť aj podľa iných atribútov, ako je meno alebo vek. Aby sme to dosiahli, budeme musieť namiesto metódy „rollNo“ použiť premennú mena alebo veku v metóde „CompareTo“.

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

Porovnateľné verzus porovnávač

Porovnávač je tiež rozhranie ako porovnateľné, ktoré sa používa na porovnávanie dvoch objektov typu. Rozdiel je v tom, že porovnávač nie je implementovaný do samotnej triedy entity. Musíme ju implementovať do inej triedy a explicitne ju poskytnúť triediacemu mechanizmu. Na tento účel môžeme použiť aj anonymnú inštanciu triedy.

Predpokladajme napríklad, že máme triedu Student bez zavedenia porovnateľného rozhrania:

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

Ak sa pokúsite spustiť tento program, dostanete túto výnimku:

Pretože TreeSet potrebuje spôsob zoradenia prvkov.

Na vyriešenie tejto chyby môžeme použiť porovnávač implementovaný v tomto programe:

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 vidieť, že rozhranie porovnávača je implementované v anonymnej vnútornej triede a inštancia je poskytnutá TreeSet na triedenie prvkov. Teraz získate správny výstup ako predtým.

Rozhranie kolekcie v jazyku Java

Kolekcia je koreňové rozhranie v rámci kolekcií. Obsahuje vyhlásenie o všetkých metódach na všeobecné použitie, ktoré sú implementované v kolekciách, ako sú zoznamy a sady. Rozhranie mapy nerozširuje rozhranie Zbierka, pretože Mapa je súbor párov kľúč - hodnota a nie iba súbor prvkov. Niektoré metódy rozhrania kolekcie sú implementované do abstraktnej triedy „AbstractCollection“.

Toto rozhranie nie je priamo implementované, ale rozšírené o špecifické rozhrania, pretože implementácia týchto metód je špecifická pre kolekciu. Napríklad, niektorá kolekcia umožňuje duplicitné prvky (Ex-List), zatiaľ čo niektoré nie (Ex-Set), niektoré udržiavajú indexovanie (Ex-List), zatiaľ čo niektoré nie (Ex-Set).

Tu sú opísané niektoré dôležité metódy:

  1. Boolean add (E e): Táto metóda pridá prvok do tejto kolekcie a vráti stav operácie add.
  2. boolean addAll (Zbierka c): Táto metóda pridá do tejto kolekcie všetky prvky zo zadanej kolekcie a vráti stav operácie pridania.
  3. void clear (): Táto metóda odstráni všetky prvky z tejto kolekcie.
  4. boolean obsahuje (Object o): Táto metóda skontroluje, či je zadaný prvok v kolekcii alebo nie. Vráti pravdivé alebo nepravdivé hodnoty.
  5. boolean obsahuje (Zbierka c): Táto metóda skontroluje, či sú v tejto kolekcii prítomné všetky prvky zo zadanej zbierky alebo nie, a podľa toho vracia true alebo false.
  6. boolean isEmpty (): Táto metóda skontroluje, či je kolekcia prázdna alebo nie, a podľa toho vráti true alebo false.
  7. Iterátor iterátor (): Táto metóda vracia iterátor pre túto kolekciu. Iterátor sa používa na opakovanie všetkých prvkov v tejto kolekcii.
  8. boolean remove (Object o): Táto metóda odstráni určený prvok zo zbierky a vráti stav operácie odstránenia.
  9. boolean removeAll (Zbierka c): Táto metóda odstráni všetky prvky z tejto kolekcie, ktoré sú prítomné v špecifikovanej kolekcii a tejto kolekcii.
  10. boolean keepAll (Zbierka c): Táto metóda odstráni všetky prvky z tejto kolekcie, ktoré nie sú prítomné v špecifikovanej kolekcii a sú prítomné v tejto kolekcii.
  11. int size (): Táto metóda vracia veľkosť tejto kolekcie.
  12. Object () toArray (): Toto je dôležitá metóda, ktorá vytvára a vracia pole obsahujúce všetky prvky tejto kolekcie.
  13. T () toArray (T () a): Táto metóda pridá všetky prvky tejto kolekcie do určeného poľa a vráti pole. Ak je veľkosť poľa menšia ako veľkosť tejto kolekcie, vytvorí nové pole typov rovnaké ako typ zadaného poľa a vráti ho. Ak je veľkosť zadaného poľa vyššia ako veľkosť tejto kolekcie, pre ostatné prvky v poli sa nastaví nulová hodnota a pole sa vráti.

Záver - porovnateľný v príklade Java

Aby som to zhrnul, rozhranie porovnateľného v jazyku Java je veľmi užitočné na manuálne porovnávanie objektov, triedenie kolekcií a polí alebo samotné triedenie kolekcií. Elementy môžeme usporiadať aj na základe rôznych atribútov entity. Nevyžaduje sa, ale dôrazne sa odporúča mať rovnaký výsledok z metódy rovnosti a metódy „CompareTo“, aby sa zabránilo neporiadku v kolekcii, ktorá používa obe tieto metódy.

Odporúčané články

Toto je sprievodca porovnateľným príkladom Java. Tu diskutujeme Úvod porovnateľný v jazyku Java, rozhranie kolekcie v jazyku Java atď. Ďalšie informácie nájdete aj v ďalších navrhovaných článkoch -

  1. Triedenie v Jave
  2. Najlepšie Java IDE
  3. Sekvencie v Pythone
  4. Funkcie reťazca Oracle
  5. Kompletný sprievodca triedením v C # s príkladmi
  6. Zbierky PL / SQL Syntax, typy, výnimky

Kategórie: