comparable comparator interfaces java
Denne veiledningen forklarer begrepet Comparable And Comparator Interfaces In Java med eksempler. Du vil også lære om forskjellene mellom de to:
Vi lærte alt om grensesnitt i våre tidligere veiledninger. Et grensesnitt brukes til å erklære abstrakte metoder og statiske eller endelige variabler. Som standard er grensesnittmetoder offentlige. Siden Java 8 kan grensesnitt også ha definerte statiske metoder og standardmetoder.
Java tilbyr forskjellige innebygde grensesnitt som vi kan bruke til å utføre forskjellige operasjoner. I denne opplæringen vil vi diskutere to slike grensesnitt, dvs. Comparable og Comparator. Et sammenlignbart grensesnitt brukes til å sortere objekt i henhold til den naturlige rekkefølgen. Comparator-grensesnitt brukes til å sortere individuelle attributter til forskjellige objekter.
=> Utforsk Simple Java Training Series her.
La oss begynne med et sammenlignbart grensesnitt.
Hva du vil lære:
- Sammenlignbart grensesnitt i Java
- Komparatorgrensesnitt i Java
- Forskjellen mellom sammenlignbar vs komparator
- Konklusjon
Sammenlignbart grensesnitt i Java
Sammenlignbart grensesnitt sorterer listestrukturene som Arrays og ArrayLists som inneholder tilpassede objekter. Når listeobjektene implementerer det sammenlignbare grensesnittet, kan vi bruke metoden Collections.sort () eller Arrays.sort () i tilfelle arrays for å sortere innholdet.
Men når vi har tilpassede klasser og vi trenger å sortere objektene deres, må vi implementere det sammenlignbare grensesnittet i denne klassen. Det sammenlignbare grensesnittet er en del av java.lang pakke. Dette grensesnittet har bare en metode, CompareTo (). Ved hjelp av et sammenlignbart grensesnitt kan vi sortere et enkelt datamedlem om gangen.
For eksempel, hvis vi har navn og alder som felt i klassen vår, kan vi om gangen enten sortere klasseobjektene på navn eller alder. Vi kan ikke sortere både på navn og alder.
Som forklart ovenfor, kan vi implementere det sammenlignbare grensesnittet i Java ved å ha en tilpasset klasse for å implementere det sammenlignbare grensesnittet. Det sammenlignbare grensesnittet har bare en metode ‘CompareTo’ som må overstyres i klassen for å sortere de egendefinerte objektene.
‘CompareTo’ metode
Metoden 'CompareTo' i det sammenlignbare grensesnittet brukes til å sammenligne det nåværende objektet med det gitte objektet. Den generelle syntaksen til comparTo-objektet er gitt nedenfor.
public int compareTo (Objekt obj)
Som vist ovenfor godtar comparTo-metoden et objekt som et argument (det kan være et hvilket som helst tilpasset objekt) og sammenligner det med det gjeldende objektet som brukes til å påkalle denne metoden.
CompareTo-metoden returnerer et heltall som kan ha en av følgende verdier:
- Positivt (> 0) heltall => det nåværende objektet> objektparameteren passert.
- Negativ (det nåværende objektet
- Null (= 0) => gjeldende objekt og spesifiserte objekt er begge like.
Vi kan bruke comparTo () -metoden til å sortere:
- Objekter av strengtype
- Pakkeklasseobjekter
- Brukerdefinerte eller egendefinerte objekter
La oss nå implementere et eksempel på et sammenlignbart grensesnitt.
Sammenlignbart grensesnitteksempel
Følgende Java-program implementerer en Person-klasse som inneholder navn og alder som medlemsfelt. Denne klassen implementerer et 'sammenlignbart' grensesnitt som lar oss sortere objektet til klasse Person.
Merk at når vi skal sortere egendefinerte objekter, må vi overstyre 'CompareTo ()' - metoden til det sammenlignbare grensesnittet.
teststrategidokumentmal for smidig metodikk
Inne i den overstyrte comparTo () -metoden, sammenligner vi alderen på personobjektet som sendes med det til det nåværende objektet, og returnerer deretter verdien.
Et eksempel på Java-program er gitt nedenfor.
//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!'); } } }
Produksjon:
Som vist fra utgangen, bruker vi et sammenlignbart grensesnitt for å sammenligne to objekter i personklassen basert på aldersmedlemvariabelen.
Så som navnet antyder, lar et sammenlignbart grensesnitt oss sammenligne ett objekt med det andre forutsatt at objektene er av samme type. Så lenge objektene vet å ordne seg selv, kan vi enkelt sortere objektene ved å bruke den eneste metoden ‘CompareTo ()’ som tilhører dette grensesnittet.
Java String CompareTo () -metode
Vi kan også bruke comparTo () -metoden til å sammenligne to objekter av strengstypen i Java. De to strengobjektene sammenlignes leksikografisk ved å konvertere hvert tegn i strengobjektet til dets tilsvarende Unicode-tegn.
Hvis to strenger er like, returneres 0. Hvis det første objektet er større enn det andre objektet, returneres en positiv verdi og en negativ verdi returneres hvis det første strengobjektet er mindre enn det andre strengobjektet.
For eksempel,
string1.compareTo (string2) vil sammenligne streng1 og streng 2 leksikografisk.
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); } }
Produksjon:
I det ovennevnte programmet så vi hvordan du bruker metoden CompareTo () til å sammenligne to strenger. Før det brukte vi comparTo () -metoden til å sammenligne heltallverdiene (alder for eksempel). På samme måte kan vi bruke de andre datatypene som dobler med comparTo () -metoden.
La oss nå gå videre til Comparator-grensesnittet i Java.
Komparatorgrensesnitt i Java
Vi har allerede sett hvordan det sammenlignbare grensesnittet fungerer. Det sammenlignbare grensesnittet lar oss sortere egendefinerte objekter basert på et enkelt datamedlem. Men når kravet oppstår for å sortere objektet basert på flere felt eller datamedlemmer, kan vi velge et Comparator-grensesnitt.
Ved hjelp av Comparator-grensesnittet kan vi opprette mer enn en komparator, avhengig av hvor mange felt vi vil bruke til å sortere de egendefinerte objektene. Ved å bruke komparatorgrensesnittet, antar vi at vi vil sortere det egendefinerte objektet på to medlemsfelt navn og alder, så må vi ha to komparatorer, en for navn og en for alder.
Så kan vi ringe metoden Collections.sort () med disse komparatorene.
Så hvordan kan vi skrive Comparators?
Tenk på et eksempel på en klasselever med navn og alder som felt. Tenk på at vi vil sortere studentobjekter på navn og aldersfelt.
For dette formålet må vi først skrive Comparator-klasser, StudentAgeComparator og StudenNameComparator. I disse klassene vil vi overstyre sammenligningsmetoden () i Comparator-grensesnittet, og så vil vi kalle Collections.sort-metoden ved å bruke hver av disse komparatorene for å sortere studentobjekter.
Sammenligningsgrensesnittet inneholder et 'sammenligne' objekt som brukes til å sammenligne objekter i to forskjellige klasser. Den generelle syntaksen for sammenligningsmetoden er:
offentlig int sammenligne (Objekt obj1, Objekt obj2);
Sammenligningsmetoden sammenligner obj1 med obj2.
Comparator-grensesnittet er en del av java.util pakke og bortsett fra sammenligningsmetoden; den inneholder også en annen metode som heter lik.
Java Comparator Eksempel
La oss implementere et sammenligningseksempel i Java. Igjen har vi tatt en studentklasse med navn og alder som data-medlemmer. Deretter definerer vi en komparatorklasse AgeComparator som overstyrer sammenligningsmetoden for å sammenligne alderen på to elever og returnere passende verdier.
I hovedmetoden konstruerer vi en Arraylist av Studentobjekter. Så kaller vi Collections.sort-metoden med ArrayList og AgeComparator-objekt som argumenter. Dette sorterer studentobjektene etter alder.
Java-programmet som implementerer dette scenariet er gitt nedenfor.
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); } } }
Produksjon:
I det ovennevnte programmet, i likhet med måten vi har skrevet AgeComparator for å sortere studentobjektene basert på alder, kan vi også skrive en annen NameComparator for å sortere studentobjektene basert på navnefeltet.
På denne måten kan vi ha så mange Comparator-klasser som kreves for å sortere objekter i forskjellige felt. Måten vi sammenlignet to int-variabler på, kan vi også sammenligne variabler fra de andre datatypene ved hjelp av Compare-metoden.
Forskjellen mellom sammenlignbar vs komparator
Sammenlignbart grensesnitt | Sammenligningsgrensesnitt |
---|---|
Bruker Collections.sort (List) for å sortere elementer. | Bruker Collections.sort (List, Comparator) for å sortere elementene. |
Det sammenlignbare grensesnittet gir sortering av ett felt. | Sammenligningsgrensesnittet gir flere feltsortering. |
Sammenlignbart grensesnitt sorterer objekt i henhold til naturlig bestilling. | Comparator-grensesnitt sorterer forskjellige attributter for forskjellige objekter. |
Ved å bruke et sammenlignbart grensesnitt kan vi sammenligne gjeldende objekt ‘dette’ med det spesifiserte objektet. | Ved hjelp av et komparatorgrensesnitt kan vi sammenligne objekter av forskjellige klasser. |
En del av pakken java.lang. | En del av java.util-pakken. |
Bruken av et sammenlignbart grensesnitt endrer den faktiske klassen. | Comparator endrer ikke den opprinnelige klassen. |
Tilbyr sammenligningsmetode () for å sortere elementer. | Tilbyr sammenligningsmetode () for å sortere elementer. |
ofte stilte spørsmål
Q # 1) Er sammenlignbart et funksjonelt grensesnitt?
Svar: Ja, sammenlignbart er et funksjonelt grensesnitt. Den erklærer en enkelt abstrakt metode, sammenlignTo ().
Spørsmål 2) Hvordan lager du en klasse som kan sammenlignes?
Svar: Vi gjør en klasse sammenlignbar ved å implementere det sammenlignbare grensesnittet. Inne i klassen overstyrer vi comparTo () -metoden for å sortere objektet. Vi passerer et objekt og sammenligner det med det nåværende objektet.
Metoden comparTo () returnerer 0 hvis to objekter er like. Det returnerer et negativt tall hvis det første objektet er mindre enn det andre og positivt hvis det første objektet er større enn det andre objektet.
Q # 3) Hva er hovedformålet med Comparator-grensesnittet?
Svar: Comparator-grensesnitt brukes hovedsakelig til å sortere de egendefinerte objektene. Et komparatorgrensesnitt kan også brukes til å sammenligne objekter av forskjellige klasser. Sammenligningsgrensesnittet kan også brukes til å sortere objekter i flere felt.
Spørsmål 4) Hvorfor brukes Comparator i Java?
Svar: Comparator-grensesnitt brukes hovedsakelig når vi ønsker en annen sorteringsrekkefølge for våre tilpassede objekter enn naturlig bestilling basert på flere felt.
Q # 5) Hva implementerer det sammenlignbare grensesnittet?
Svar: Sammenlignbart grensesnitt er implementert av alle wrapper-klasser og String-klasser. Egendefinerte objekter bruker også det sammenlignbare grensesnittet for sortering.
Konklusjon
I denne opplæringen har vi diskutert sammenlignbare grensesnitt og komparatorgrensesnitt i Java. Et sammenlignbart grensesnitt brukes til å sortere objektene i henhold til naturlig rekkefølge og kan av og til bare sortere objektene på ett felt.
Det sammenlignbare grensesnittet har en metode ‘CompareTo ()’ som må overstyres i klassen som implementerer Comparator-grensesnittet, og hvis objekter skal sorteres.
Comparator-grensesnittet brukes til å sortere egendefinerte objekter som skal sorteres basert på hvilken som helst annen rekkefølge. Sammenligningsgrensesnittet lar oss også sortere objekter i to forskjellige klasser basert på flere felt.
=> Les gjennom Easy Java Training Series.
Anbefalt lesing
- Java-grensesnitt og abstrakt klasseopplæring med eksempler
- Sett grensesnitt i Java: Java Set Tutorial med eksempler
- Java-distribusjon: Opprettelse og utføring av Java JAR-fil
- Java Basics: Java Syntax, Java Class og Core Java Concepts
- Java Virtual Machine: Hvordan JVM hjelper med å kjøre Java-applikasjoner
- ListIterator-grensesnitt i Java med eksempler
- Array of Objects In Java: Hvordan lage, initialisere og bruke
- JAVA-opplæring for nybegynnere: 100+ praktiske Java-videoveiledninger