Oversigt over sammenlignelig i Java-eksempel

Sammenlignelig i Java er en interferens, der bruges til at sammenligne aktuelle objekter med andre objekter af samme type. Denne sammenligning kan bruges til at sortere elementer i en samling. Du bliver nødt til at implementere interface i en klasse for at gøre det sorterbart eller "sammenligneligt". Du bliver nødt til at implementere kun en metode “sammenligne”. Denne rækkefølge af enhver type kaldes naturlig bestilling, og den implementerede “sammenligne” -metode kaldes naturlig sammenligningsmetode. Her i denne Sammenlignelige i Java-eksempelartikel vil vi se på de forskellige eksempler på sammenlignelige i java.

Erklæring:

Interface sammenlignelig

For at implementere denne grænseflade skal du implementere denne metode:

public int compareTo(To);

Parametre:

T - er den type objekt, som dette objekt sammenlignes med.

Returværdi:

sammenligneTo-metoden returnerer 0, hvis objektet er angivet, og dette objekt er lige, returnerer et negativt heltal, hvis dette objekt er mindre end det specificerede objekt, og det returnerer positivt heltal, hvis dette objekt er større end det specificerede objekt.

kaster:

ClasscastException - Hvis objektet, der sendes til denne metode, er null

NullPointerException - Hvis objektet, der videregives til denne metode, ikke er kompatibelt med dette objekt.

Klasser, der implementerer sammenlignelig grænseflade, har deres naturlige rækkefølge specificeret med sig, og så de kan sorteres direkte i Collection eller Arrays vha. Collections.sort () og Arrays.sort (). De kan også bruges som nøgle i sorterede kort og elementer i sorterede sæt uden at specificere Comparator separat.

Lad os forstå den sammenlignelige grænseflade ved hjælp af et eksempel:

Eksempel:

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

Produktion:

Forklaring

Dette er en applikation til at gemme studerendes detaljer.

  • For det første har vi oprettet en klasse "Student" som repræsentation af enheden Student. Vi skal gemme grundlæggende detaljer som rullenummer, navn og alder på studerende.
  • Og kravet er at sortere listen over studerende baseret på rullenummer.
  • For at opfylde dette krav implementeres en sammenlignelig grænseflade og sammenlignes med de studerende, der er baseret i rullenummer, da du kan se implementeringen af ​​metoden "sammenligne".
  • Så har vi den vigtigste metode til at vise funktionaliteten. Her har vi oprettet et "TreeSet" og tilføjet fem studerende med tilfældige rullenumre. Vi har brugt “TreeSet”, fordi det gemmer elementer i sorteret rækkefølge.
  • Nu, hvis du itererer gennem listen over studerende, vil du opdage, at studerende sorteres på baggrund af rullenummer. Det var, hvad vores krav var!
  • Vi kunne også sortere de studerende baseret på andre attributter som navn eller alder. For at gøre dette, bliver vi nødt til at bruge navn eller aldersvariabler i “sammenligne” -metoden i stedet for “rollNo”.

Eksempel:

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

Sammenlignelig vs komparator

Comparator er også en grænseflade som Comparable, der bruges til at sammenligne to objekter af en type. Forskellen er, at Comparator ikke implementeres i selve enhedsklassen. Vi skal implementere det i en anden klasse og give eksporten af ​​det til sorteringsmekanismen eksplicit. Vi kan også bruge en anonym klasseinstans til dette formål.

Antag f.eks., At vi har en studerendeklasse uden at implementere sammenlignelig interface:

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

Hvis du prøver at udføre dette program, får du denne undtagelse:

Fordi TreeSet har brug for en måde at sortere elementerne på.

For at løse denne fejl kan vi bruge Comparator som implementeret i dette program:

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

Du kan se, at Comparator-grænsefladen er implementeret i en anonym indre klasse og forekomst til TreeSet til sortering af elementer. Nu får du en ordentlig output som tidligere.

Samling interface i Java

Samlingen er rodgrænsefladen i samlingens rammer. Det indeholder erklæringen af ​​alle generelle metoder, der implementeres i samlinger som lister og sæt. Kortgrænsefladen udvider ikke Collection-grænsefladen, fordi Map er en samling af nøgleværdipar og ikke kun en samling af elementer. Nogle af Collection interface-metoder implementeres i en abstrakt klasse “AbstractCollection”.

Denne grænseflade implementeres ikke direkte, men udvides med specifikke grænseflader, fordi implementeringen af ​​disse metoder er samlingsspecifik. For eksempel tillader nogle samling duplikatelementer (Ex-List), mens nogle ikke (Ex-Set), nogle opretholder indeksering (Ex-List), mens andre ikke (Ex-Set).

Nogle vigtige metoder er beskrevet her:

  1. Boolsk add (E e): Denne metode tilføjer et element til denne samling og returnerer status for tilføjelsesprocessen.
  2. boolsk addAll (samling c): Denne metode tilføjer alle elementerne fra den specificerede samling til denne samling og returnerer status for tilføjelsesprocessen.
  3. void clear (): Denne metode fjerner alle elementer fra denne samling.
  4. boolean indeholder (Objekt o): Denne metode kontrollerer, om det specificerede element er til stede i samlingen eller ikke. Returnerer sandt eller falsk i overensstemmelse hermed.
  5. boolean indeholder (Samling c): Denne metode kontrollerer, om alle elementer fra den specificerede samling er til stede i denne samling eller ikke og returnerer sandt eller usant i overensstemmelse hermed.
  6. boolean isEmpty (): Denne metode kontrollerer, om samlingen er tom eller ikke og returnerer sandt eller falsk i overensstemmelse hermed.
  7. Iterator iterator (): Denne metode returnerer iterator til denne samling. Iterator bruges til at itereere gennem alle elementerne i denne samling.
  8. boolsk fjernelse (objekt o): Denne metode fjerner det specificerede element fra samlingen og returnerer status for fjernbetjening.
  9. boolean removeAll (Collection c): Denne metode fjerner alle elementerne fra denne samling, der er til stede i den specificerede samling og denne samling.
  10. boolsk beholdAll (Samling c): Denne metode fjerner alle elementer fra denne samling, som ikke er til stede i den specificerede samling og findes i denne samling.
  11. int størrelse (): Denne metode returnerer størrelsen på denne samling.
  12. Objekt () toArray (): Dette er en vigtig metode, der danner og returnerer matrixen, der indeholder alle elementerne i denne samling.
  13. T () toArray (T () a): Denne metode tilføjer alle elementerne i denne samling i en specificeret matrix og returnerer matrixen. Hvis størrelsen på matrixen er mindre end størrelsen på denne samling, opretter den en ny matrix af typer, der er den samme som typen af ​​specificeret matrix og returnerer den. Hvis størrelsen på den specificerede matrix er mere end størrelsen på denne samling, indstilles nullværdien for de resterende elementer i arrayen og returnerer arrayen.

Konklusion - Sammenlignelig i Java-eksempel

For at opsummere er Comparable i Java interface meget nyttigt til at sammenligne objekter manuelt, sortere samlinger og arrays eller selv have sorteret samling. Vi kan også sortere elementer baseret på forskellige attributter for enheden. Det kræves ikke, men stærkt anbefales at have det samme resultat fra ligestillinger og “sammenligne” -metoden for at undgå rod i en samling, der bruger begge disse metoder.

Anbefalede artikler

Dette er en guide til Sammenlignelig i Java-eksempel. Her diskuterer vi introduktionen sammenlignelig i Java-eksempel, samling interface i Java osv. Du kan også gennemgå vores andre foreslåede artikler for at lære mere–

  1. Sorterer i Java
  2. Bedste Java IDE
  3. Sekvenser i Python
  4. Oracle strengfunktioner
  5. Komplet guide til sortering i C # med eksempler
  6. PL / SQL samlinger | Syntaks, typer, undtagelser

Kategori: