comparable comparator interfaces java
Ovaj tutorial s primjerima objašnjava koncept usporedivih i usporednih sučelja u Javi. Također ćete naučiti o razlikama između njih dvoje:
Sve o sučeljima naučili smo u našim ranijim vodičima. Sučelje se koristi za deklariranje apstraktnih metoda i statičkih ili konačnih varijabli. Prema zadanim postavkama metode sučelja su javne. Od Java 8, sučelja također mogu imati definirane statičke i zadane metode.
Java nudi razna ugrađena sučelja koja možemo koristiti za izvršavanje raznih operacija. U ovom uputstvu raspravit ćemo o dva takva sučelja, tj. Usporedivom i Usporednom. Usporedno sučelje koristi se za razvrstavanje predmeta prema prirodnom redoslijedu. Sučelje za usporedbu koristi se za sortiranje pojedinačnih atributa različitih objekata.
=> Ovdje istražite jednostavnu seriju Java treninga.
Počnimo s usporedivim sučeljem.
Što ćete naučiti:
- Usporedivo sučelje u Javi
- Sučelje za usporedbu u Javi
- Razlika između usporedivih vs usporednika
- Zaključak
Usporedivo sučelje u Javi
Usporedivo sučelje sortira strukture popisa poput Arrays i ArrayLists koji sadrže prilagođene objekte. Jednom kada objekti popisa implementiraju usporedivo sučelje, tada za sortiranje sadržaja možemo koristiti metodu Collections.sort () ili Arrays.sort () u slučaju nizova.
Ali kad imamo prilagođene klase i ako moramo razvrstati njihove objekte, tada ćemo u ovu klasu morati implementirati usporedivo sučelje. Usporedivo sučelje dio je java.lang paket. Ovo sučelje ima samo jednu metodu, CompareTo (). Korištenjem usporedivog sučelja istovremeno možemo sortirati pojedine članove podataka.
Na primjer, ako imamo ime i dob kao polja u svojoj klasi, tada istovremeno možemo sortirati objekte klase prema imenu ili dobi. Ne možemo istovremeno sortirati i ime i dob.
Kao što je gore objašnjeno, usporedivo sučelje u Java možemo implementirati tako da imamo prilagođenu klasu za implementaciju usporedivog sučelja. Usporedivo sučelje ima samo jednu metodu 'compareTo' koju je potrebno nadjačati u klasi da bi se sortirali prilagođeni objekti.
Metoda ‘CompareTo’
Metoda ‘compareTo’ usporedivog sučelja koristi se za usporedbu trenutnog objekta s danim objektom. Općenita sintaksa objekta compareTo dana je u nastavku.
public int compareTo (objekt objekta)
Kao što je gore prikazano, metoda compareTo prihvaća objekt kao argument (to može biti bilo koji prilagođeni objekt) i uspoređuje ga s trenutnim objektom koji se koristi za pozivanje ove metode.
Metoda compareTo vraća cijelu vrijednost koja može imati jednu od sljedećih vrijednosti:
- Pozitivan (> 0) cijeli broj => trenutni objekt> proslijeđeni parametar objekta.
- Negativno (trenutni objekt
- Nula (= 0) => trenutni objekt i navedeni objekt su jednaki.
Za sortiranje možemo koristiti metodu compareTo ():
- Objekti tipa stringa
- Objekti klase omotača
- Korisnički definirani ili prilagođeni objekti
Sad ćemo implementirati primjer usporedivog sučelja.
Primjer usporedivog sučelja
Sljedeći Java program implementira klasu Person koja kao ime člana sadrži ime i dob. Ova klasa implementira ‘Usporedivo’ sučelje koje će nam omogućiti sortiranje predmeta klase Osoba.
Imajte na umu da dok ćemo sortirati prilagođene objekte, moramo nadjačati metodu 'compareTo ()' u Usporednom sučelju.
kako se koristi .bin datoteka
Unutar nadjačane metode compareTo () uspoređujemo dob osobe koja je proslijeđena i starost trenutnog objekta i u skladu s tim vraćamo vrijednost.
Primjer Java programa dat je u nastavku.
//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!'); } } }
Izlaz:
Kao što se vidi iz rezultata, koristimo usporedivo sučelje za usporedbu dva objekta klase Person na temelju varijable člana starosti.
Dakle, kao što i samo ime govori, usporedivo sučelje omogućuje nam usporedbu jednog objekta s drugim pod uvjetom da su objekti iste vrste. Sve dok se predmeti znaju sami rasporediti, objekte možemo lako sortirati koristeći jedinu metodu ‘compareTo ()’ koja pripada ovom sučelju.
Metoda Java String CompareTo ()
Također možemo upotrijebiti metodu compareTo () za usporedbu dva objekta tipa String u Javi. Dva se string objekta uspoređuju leksikografski pretvaranjem svakog znaka stringa u njegov ekvivalentni Unicode znak.
Ako su dva niza jednaka, vraća se 0. Ako je prvi objekt veći od drugog, vraća se pozitivna vrijednost i negativna vrijednost ako je prvi objekt niza manji od drugog String objekta.
Na primjer,
string1.compareTo (string2) usporedit će string1 i string 2 leksikografski.
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); } }
Izlaz:
U gornjem programu vidjeli smo kako koristiti metodu compareTo () za usporedbu dva niza. Prije toga koristili smo metodu compareTo () za usporedbu cjelobrojnih vrijednosti (na primjer dob). Slično tome, druge metode podataka, poput parova, možemo koristiti pomoću metode compareTo ().
Sada prijeđimo na sučelje za usporedbu u Javi.
Sučelje za usporedbu u Javi
Već smo vidjeli kako funkcionira usporedivo sučelje. Usporedivo sučelje omogućuje nam sortiranje prilagođenih objekata na temelju jednog člana podataka. Ali kada se pojavi zahtjev za razvrstavanjem objekta na temelju više polja ili članova podataka, tada se možemo odlučiti za sučelje za usporedbu.
Korištenjem sučelja za usporedbu možemo stvoriti više usporednika, ovisno o tome koliko polja želimo koristiti za sortiranje prilagođenih objekata. Korištenjem sučelja za usporedbu, pretpostavimo da želimo razvrstati prilagođeni objekt na dva člana polja ime i dob, tada moramo imati dvije usporednice, jednu za ime i jednu za dob.
Tada možemo pozvati metodu Collections.sort () s ovim Usporediteljima.
Pa kako točno možemo napisati komparatore?
Razmotrimo primjer učenika razredne nastave kojem su ime i dob. Uzmite u obzir da želimo razvrstati studentske objekte po poljima imena i dobi.
U tu svrhu morat ćemo prvo napisati tečajeve za usporedbu, StudentAgeComparator i StudenNameComparator. U ovim razredima nadjačat ćemo metodu uspoređivanja () sučelja Usporednika, a zatim ćemo pozvati metodu Collections.sort koristeći svaku od ovih usporedbi za razvrstavanje studentskih objekata.
Sučelje usporedbe sadrži objekt 'usporedi' koji se koristi za usporedbu objekata dvije različite klase. Opća sintaksa metode uspoređivanja je:
public int compare (Objekt obj1, Objekt obj2);
Metoda usporedbe uspoređuje obj1 s obj2.
Sučelje za usporedbu dio je java.util paket i osim metode usporedbe; sadrži i drugu metodu koja se naziva jednako.
Primjer Java usporednice
Primijenimo primjer Comparatora u Javi. Ponovo smo uzeli studentski razred s imenom i dobi kao članom podataka. Zatim definiramo klasu usporedbe AgeComparator koja nadjačava metodu usporedbe za usporedbu dobi dva učenika i vraćanje odgovarajućih vrijednosti.
U glavnoj metodi konstruiramo Arraylist studentskih objekata. Tada pozivamo metodu Collections.sort s objektima ArrayList i AgeComparator kao argumentima. Ovo sortira učeničke predmete prema dobi.
Java program koji implementira ovaj scenarij dan je u nastavku.
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); } } }
Izlaz:
U gore navedenom programu, slično načinu na koji smo napisali AgeComparator za razvrstavanje studentskih objekata na temelju Doba, također možemo napisati drugi NameComparator za razvrstavanje studentskih objekata na temelju imena.
Na ovaj način možemo imati onoliko klasa komparatora koliko je potrebno za sortiranje objekata u raznim poljima. Način na koji smo usporedili dvije varijable int, također možemo usporediti varijable ostalih tipova podataka pomoću metode Usporedba.
Razlika između usporedivih vs usporednika
Usporedivo sučelje | Sučelje za usporedbu |
---|---|
Koristi Collections.sort (List) za sortiranje elemenata. | Za sortiranje elemenata koristi Collections.sort (List, Comparator). |
Usporedivo sučelje omogućuje sortiranje u jednom polju. | Sučelje za usporedbu omogućuje sortiranje više polja. |
Usporedivo sučelje sortira objekt prema prirodnom redoslijedu. | Sučelje za usporedbu sortira razne atribute različitih objekata. |
Korištenjem usporedivog sučelja možemo usporediti trenutni objekt 'ovo' s navedenim objektom. | Pomoću sučelja za usporedbu možemo uspoređivati objekte različitih klasa. |
Dio paketa java.lang. | Dio paketa java.util. |
Korištenje usporedivog sučelja mijenja stvarnu klasu. | Usporednik ne mijenja izvornu klasu. |
Pruža metodu compareTo () za sortiranje elemenata. | Pruža metodu compare () za sortiranje elemenata. |
Često postavljana pitanja
P # 1) Je li usporedivo funkcionalno sučelje?
Odgovor: Da, usporedivo je funkcionalno sučelje. Deklarira jednu apstraktnu metodu, compareTo ().
P # 2) Kako napraviti razred usporedivim?
Odgovor: Klasu uspoređujemo primjenom sučelja Comparable. Unutar klase nadjačavamo metodu compareTo () za sortiranje objekta. Prolazimo objekt i uspoređujemo ga s trenutnim objektom.
Metoda compareTo () vraća 0 ako su dva objekta jednaka. Vraća negativan broj ako je prvi objekt manji od drugog i pozitivan ako je prvi objekt veći od drugog.
P # 3) Koja je glavna svrha sučelja za usporedbu?
Odgovor: Sučelje za usporedbu uglavnom se koristi za sortiranje prilagođenih objekata. Sučelje za usporedbu može se koristiti i za usporedbu objekata različitih klasa. Također, sučelje usporedbe može se koristiti za sortiranje objekata u više polja.
P # 4) Zašto se Comparator koristi u Javi?
Odgovor: Sučelje za usporedbu uglavnom se koristi kada želimo drugačiji redoslijed sortiranja za naše prilagođene objekte, osim prirodnog poredavanja na temelju više polja.
P # 5) Što implementira usporedivo sučelje?
Odgovor: Usporedivo sučelje implementiraju sve klase omotača i klasa String. Prilagođeni objekti također koriste usporedivo sučelje za sortiranje.
Zaključak
U ovom uputstvu raspravljali smo o usporedivim i usporednim sučeljima u Javi. Usporedivo sučelje koristi se za sortiranje objekata prema prirodnom redoslijedu i odjednom može sortirati objekte samo na jednom polju.
Usporedivo sučelje ima metodu 'compareTo ()' koju treba nadjačati u klasi koja implementira sučelje Comparator i čije će se objekte sortirati.
Sučelje za usporedbu koristi se za sortiranje prilagođenih objekata koji se trebaju sortirati na temelju bilo kojeg drugog redoslijeda. Sučelje usporedbe također nam omogućuje sortiranje objekata dvije različite klase na temelju više polja.
=> Pročitajte seriju Easy Java Training.
Preporučena literatura
- Java sučelje i udžbenik klase sažetak sa primjerima
- Postavljanje sučelja u Javi: Vodič za postavljanje Java s primjerima
- Implementacija Jave: Izrada i izvršavanje Java JAR datoteke
- Osnove Java: Java sintaksa, Java klasa i osnovni koncepti Java
- Java virtualni stroj: kako JVM pomaže u pokretanju Java aplikacije
- ListIterator sučelje u Javi s primjerima
- Niz objekata u Javi: kako stvoriti, inicijalizirati i koristiti
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala