comparable comparator interfaces java
Ta vadnica s primeri pojasnjuje koncept primerljivih in primerjalnih vmesnikov v Javi. Spoznali boste tudi razlike med obema:
Vse o vmesnikih smo izvedeli v naših prejšnjih vajah. Vmesnik se uporablja za razglasitev abstraktnih metod in statičnih ali končnih spremenljivk. Privzeto so metode vmesnika javne. Od Java 8 imajo lahko vmesniki v njih definirane tudi statične in privzete metode.
Java ponuja različne vgrajene vmesnike, s katerimi lahko izvajamo različne operacije. V tej vadnici bomo razpravljali o dveh takih vmesnikih, to je primerljivem in primerjalnem. Za razvrščanje predmetov po naravnem vrstnem redu se uporablja primerljiv vmesnik. Primerjalni vmesnik se uporablja za razvrščanje posameznih atributov različnih predmetov.
=> Tu raziščite preprosto serijo usposabljanja za Java.
Začnimo s primerljivim vmesnikom.
Kaj se boste naučili:
- Primerljiv vmesnik v Javi
- Primerjalni vmesnik v Javi
- Razlika med primerljivimi primerjalci Vs
- Zaključek
Primerljiv vmesnik v Javi
Primerljiv vmesnik razvrsti strukture seznamov, kot so Arrays in ArrayLists, ki vsebujejo predmete po meri. Ko objekti seznama implementirajo primerljiv vmesnik, lahko za razvrščanje vsebine uporabimo metodo Collections.sort () ali Arrays.sort () v primeru nizov.
Ko pa imamo razrede po meri in moramo razvrstiti njihove predmete, bomo morali v tem razredu uporabiti vmesnik Comparable. Primerljiv vmesnik je del java.lang paket. Ta vmesnik ima samo en način, CompareTo (). Z uporabo primerljivega vmesnika lahko hkrati razvrstimo posamezne podatke.
Na primer, če imamo v razredu ime in starost kot polji, lahko hkrati razvrstimo predmete razreda po imenu ali starosti. Ne moremo istočasno razvrščati po imenu in starosti.
Kot je razloženo zgoraj, lahko primerljiv vmesnik v Java implementiramo tako, da imamo razred po meri za izvedbo primerljivega vmesnika. Primerljivi vmesnik ima samo eno metodo 'compareTo', ki jo je treba v razredu preglasiti, da razvrsti predmete po meri.
Metoda ‘CompareTo’
Metoda ‘compareTo’ primerljivega vmesnika se uporablja za primerjavo trenutnega predmeta z danim predmetom. Splošna sintaksa objekta compareTo je podana spodaj.
public int compareTo (objekt obj)
Kot je prikazano zgoraj, metoda compareTo sprejme objekt kot argument (lahko je kateri koli objekt po meri) in ga primerja s trenutnim objektom, ki se uporablja za priklic te metode.
Metoda compareTo vrne celoštevilčno vrednost, ki ima lahko eno od naslednjih vrednosti:
- Pozitivno (> 0) celo število => trenutni objekt> posredovani parameter objekta.
- Negativno (trenutni objekt
- Zero (= 0) => trenutni objekt in navedeni objekt sta enaka.
Za razvrščanje lahko uporabimo metodo compareTo ():
- Predmeti niza
- Predmeti razreda Wrapper
- Uporabniško določeni ali po meri predmeti
Zdaj pa izvedimo primer primerljivega vmesnika.
Primer primerljivega vmesnika
Naslednji program Java izvaja razred Person, ki kot polja člana vsebuje ime in starost. Ta razred izvaja vmesnik ‘Primerljiv’, ki nam bo omogočil razvrščanje predmeta razreda Oseba.
Ko bomo razvrščali predmete po meri, moramo preglasiti metodo 'compareTo ()' vmesnika Comparable.
pretvori znak v niz c ++
Znotraj prepisane metode compareTo () primerjamo starost predanega predmeta osebe s starostjo trenutnega predmeta in temu primerno vrnemo vrednost.
Spodaj je naveden primer programa Java.
//class person implementing Comparable interface class Person implements Comparable { private String name; private int age; //Person constructor public Person(String name, int age) { this.name = name; this.age = age; } //getter methods for Person members public int getAge() { return this.age; } public String getName() { return this.name; } //override toString () method @Override public String toString() { return ''; } //Override compareTo () method to compare age of two Person objects @Override public int compareTo(Person per) { if(this.age == per.age) return 0; else return this.age > per.age ? 1 : -1; } } public class Main{ public static void main(String() args) { //declare two objects of Person class Person p1 = new Person('Adrian', 24); Person p2 = new Person('Eddie', 26); int ageDiff = p1.compareTo(p2); //compare ages of two persons declared switch(ageDiff) { case -1: { System.out.println(p2.getName() + ' is older than ' + p1.getName()); break; } case 1: { System.out.println(p1.getName() + ' is older than ' + p2.getName()); break; } default: System.out.println(p1.getName () + ' and ' + p2.getName () + ' are of the same age!'); } } } Izhod:

Kot je razvidno iz rezultata, uporabljamo primerljiv vmesnik za primerjavo dveh predmetov razreda Person na podlagi spremenljivke starostnega člana.
Kot že ime pove, nam primerljiv vmesnik omogoča primerjavo enega predmeta z drugim, če so predmeti iste vrste. Dokler se predmeti znajo razporediti, lahko predmete enostavno razvrstimo z uporabo edine metode 'compareTo ()', ki pripada temu vmesniku.
Metoda Java String CompareTo ()
Za primerjavo dveh predmetov String type v Javi lahko uporabimo tudi metodo compareTo (). Objekta niza se primerjata leksikografsko s pretvorbo vsakega znaka predmeta niza v enakovreden znak Unicode.
Če sta dva niza enaka, se vrne 0. Če je prvi objekt večji od drugega, se vrne pozitivna vrednost in negativna vrednost, če je prvi nizni objekt manjši od drugega objektnega niza.
Na primer,
string1.compareTo (string2) bo leksikografsko primerjal string1 in string 2.
public class Main { public static void main(String args()) { //declare and print string objects String str1 = 'SoftwareTestingHelp'; String str2 = 'Java Series tutorial'; String str3 = 'Comparable Interface'; System.out.println('str1:' + str1); System.out.println('str2:' + str2); System.out.println('str3:' + str3); //compare strings and print the results. int retval1 = str1.compareTo( str2 ); System.out.println('
str1 & str2 comparison: '+retval1); int retval2 = str1.compareTo( str3 ); System.out.println('str1 & str3 comparison: '+retval2); int retval3 = str2.compareTo('compareTo method'); System.out.println('str2 & string argument comparison: '+retval3); } }Izhod:

V zgornjem programu smo videli, kako uporabiti metodo compareTo () za primerjavo dveh nizov. Pred tem smo za primerjavo celoštevilčnih vrednosti (na primer starost) uporabili metodo compareTo (). Podobno lahko z metodo compareTo () uporabimo tudi druge vrste podatkov, na primer dvojice.
Zdaj pa pojdimo na primerjalni vmesnik v Javi.
Primerjalni vmesnik v Javi
Videli smo že delovanje primerljivega vmesnika. Primerljiv vmesnik nam omogoča razvrščanje predmetov po meri na podlagi enega samega podatkovnega člana. Ko pa se pojavi zahteva po razvrščanju predmeta na podlagi več polj ali podatkovnih članov, se lahko odločimo za primerjalni vmesnik.
Z uporabo vmesnika Primerjalnik lahko ustvarimo več primerjalnikov, odvisno od tega, koliko polj želimo uporabiti za razvrščanje predmetov po meri. Če z uporabo primerjalnega vmesnika predpostavimo, da želimo razvrstiti objekt po meri na dve imeni in starostni polji, potem moramo imeti dva primerjalnika, enega za ime in enega za starost.
Potem lahko s temi primerjalniki pokličemo metodo Collections.sort ().
Torej, kako natančno lahko zapišemo primerjalnike?
Razmislite o primeru študenta v razredu, katerega področje je ime in starost. Upoštevajte, da želimo razvrstiti študentske predmete po poljih imena in starosti.
V ta namen bomo morali najprej napisati razrede primerjalnika, StudentAgeComparator in StudenNameComparator. V teh razredih bomo preglasili metodo compare () vmesnika Comparator, nato pa bomo za razvrščanje predmetov študentov poklicali metodo Collections.sort z uporabo vsakega od teh primerjalnikov.
Primerjalni vmesnik vsebuje objekt »primerjaj«, ki se uporablja za primerjavo predmetov dveh različnih razredov. Splošna sintaksa metode primerjave je:
javni int primerjava (objekt obj1, objekt obj2);
Metoda primerjave primerja obj1 z obj2.
Primerjalni vmesnik je del java.util paket in razen metode primerjave; vsebuje tudi drugo metodo z imenom enako.
Primer primerjalnika Java
Izvedimo primer primerjalnika v Javi. Ponovno smo za člane podatkov uporabili študentski tečaj z imenom in starostjo. Nato definiramo primerjalni razred AgeComparator, ki preglasi metodo primerjave, da primerja starost dveh študentov in vrne ustrezne vrednosti.
V glavni metodi izdelamo arraylist študentskih predmetov. Nato pokličemo metodo Collections.sort z ArrayList in AgeComparator kot argumenta. To razvrsti študentske predmete glede na starost.
Program Java, ki izvaja ta scenarij, je podan spodaj.
import java.util.*; //class student whose objects are to be sorted class Student{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } } //AgeComparator class implementing Comparator to compare objects class AgeComparator implements Comparator { public int compare(Object o1,Object o2){ Student s1=(Student)o1; Student s2=(Student)o2; if(s1.age==s2.age) return 0; else if(s1.age>s2.age) return 1; else return -1; } } class Main{ public static void main(String args()){ //create an ArrayList of Students ArrayList myList=new ArrayList(); myList.add(new Student(101,'Adrian',25)); myList.add(new Student(106,'Sydney',22)); myList.add(new Student(105,'Marcus',27)); //call Collections.sort method with AgeComparator object to sort ArrayList Collections.sort(myList,new AgeComparator()); System.out.println('Sorted Student objects by Age are as follows:'); Iterator iter= myList.iterator(); while(iter.hasNext()){ Student st=(Student) iter.next(); System.out.println(st.rollno+' '+st.name+' '+st.age); } } } Izhod:

V zgornjem programu lahko na podoben način, kot smo napisali AgeComparator za razvrščanje predmetov Študent glede na Starost, lahko tudi drugi NameComparator za razvrščanje predmetov Študent glede na polje imena.
Tako imamo lahko toliko razredov primerjalnika, kolikor je potrebno za razvrščanje predmetov na različnih poljih. Način, na katerega smo primerjali dve spremenljivki int, lahko primerjamo tudi spremenljivke drugih podatkovnih tipov z metodo Primerjava.
Razlika med primerljivimi primerjalci Vs
| Primerljiv vmesnik | Primerjalni vmesnik |
|---|---|
| Za razvrščanje elementov uporablja Collections.sort (List). | Za razvrščanje elementov uporablja Collections.sort (List, Comparator). |
| Primerljiv vmesnik omogoča razvrščanje po enem polju. | Primerjalni vmesnik omogoča razvrščanje več polj. |
| Primerljiv vmesnik razvrsti predmet po naravnem naročilu. | Primerjalni vmesnik razvrsti različne atribute različnih predmetov. |
| Z uporabo primerljivega vmesnika lahko primerjamo trenutni objekt 'to' z določenim predmetom. | S primerjalnim vmesnikom lahko primerjamo predmete različnih razredov. |
| Del paketa java.lang. | Del paketa java.util. |
| Uporaba primerljivega vmesnika spremeni dejanski razred. | Primerjalnik ne spremeni prvotnega razreda. |
| Ponuja metodo compareTo () za razvrščanje elementov. | Ponuja metodo compare () za razvrščanje elementov. |
Pogosto zastavljena vprašanja
V # 1) Ali je primerljiv funkcionalni vmesnik?
Odgovor: Da, primerljiv je funkcionalen vmesnik. Deklarira eno samo abstraktno metodo, compareTo ().
V # 2) Kako naredite razred primerljivim?
Odgovor: Z izvedbo primerljivega vmesnika naredimo razred primerljiv. Znotraj razreda za razvrščanje predmeta preglasimo metodo compareTo (). Predamo predmet in ga primerjamo s trenutnim predmetom.
Metoda compareTo () vrne 0, če sta dva predmeta enaka. Vrne negativno število, če je prvi objekt manjši od drugega, in pozitiven, če je prvi objekt večji od drugega.
V # 3) Kaj je glavni namen vmesnika primerjalnika?
Odgovor: Primerjalni vmesnik se v glavnem uporablja za razvrščanje predmetov po meri. Primerjalni vmesnik lahko uporabimo tudi za primerjavo predmetov različnih razredov. Primerjalni vmesnik lahko uporabite tudi za razvrščanje predmetov v več poljih.
V # 4) Zakaj se v Javi uporablja primerjalnik?
Odgovor: Primerjalni vmesnik se uporablja predvsem, kadar želimo drugačen vrstni red razvrščanja za naše predmete po meri, ki ni naravno urejanje na podlagi več polj.
V # 5) Kaj izvaja primerljiv vmesnik?
Odgovor: Primerljiv vmesnik izvajajo vsi razredi ovitkov in razred String. Predmeti po meri uporabljajo tudi primerljiv vmesnik za razvrščanje.
Zaključek
V tej vadnici smo razpravljali o primerljivih in primerjalnih vmesnikih v Javi. Primerljiv vmesnik se uporablja za razvrščanje predmetov po naravnem vrstnem redu in lahko hkrati razvrsti predmete samo na enem polju.
Primerljiv vmesnik ima metodo 'compareTo ()', ki jo je treba razglasiti v razredu, ki izvaja vmesnik Comparator, in katere objekte je treba razvrstiti.
Vmesnik primerjalnika se uporablja za razvrščanje predmetov po meri, ki jih je treba razvrstiti glede na kateri koli drug vrstni red. Primerjalni vmesnik nam omogoča tudi razvrščanje predmetov dveh različnih razredov na podlagi več polj.
=> Preberite serijo Easy Java Training Series.
Priporočeno branje
- Vadnica Java vmesnika in abstraktnega razreda s primeri
- Nastavitev vmesnika v Javi: Vadnica za nastavitev Java s primeri
- Uvajanje Java: Ustvarjanje in izvajanje datoteke Java JAR
- Osnove Java: Sintaksa Java, Razred Java in Osnovni koncepti Java
- Navidezni stroj Java: kako JVM pomaga pri zagonu aplikacije Java
- ListIterator vmesnik v Javi s primeri
- Niz predmetov v Javi: Kako ustvariti, inicializirati in uporabiti
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic