Comparabil vs Comparator în Java
Diferența cheie între comparabil și comparator în Java
- Comparabil în Java este un obiect pentru a se compara cu un alt obiect, în timp ce Comparator este un obiect pentru a compara diferite obiecte din clase diferite.
- Comparabil oferă
compareTo()
metoda de sortare a elementelor Java, în timp ce Comparator oferăcompare()
metoda de sortare a elementelor Java. - O interfață comparabilă este prezentă în
java.lang
pachet, în timp ce interfața Comparator este prezentă înjava.util
pachet. - Comparabil oferă o singură secvență de sortare, în timp ce Comparator oferă mai multe secvențe de sortare.
- Comparabil afectează clasa inițială, în timp ce Comparator nu afectează clasa originală.
Aici, am analizat diferența dintre comparabil și Comparator și le voi evalua cuprinzător avantajele și dezavantajele.
Ce este comparabil în Java?
Comparabil in Java este un obiect care se compară cu un alt obiect. Ajută la sortarea listei de obiecte personalizate. The Java.lang.Interfața comparabilă ar trebui să fie implementată de o clasă pentru a compara instanțele acesteia. O serie de obiecte care implementează o interfață comparabilă este sortată automat după Arrays.sort
si Collections.sort
metode.
Metoda utilizată în comparabil
Aș dori să subliniez o metodă importantă pe care o folosesc frecvent în interfața Comparabil:
Compara cu():
Metoda CompareTo() este folosită pentru a efectua sortarea naturală a unui șir. Semnificația sortării naturale este ordinea de sortare care se aplică obiectului, de exemplu, ordinea numerică pentru sortarea numerelor întregi, ordinea alfabetică pentru șir, etc.
Sintaxa lui CompareTo()
metoda este urmatoarea:
int compareTo(T obj)
În sintaxa de mai sus, T înseamnă tipul de obiecte pe care urmează să le comparați.
CompareTo()
metoda compară obiectul cu T obj.
ieșire:
- Returnează 0 dacă valorile sunt egale.
- Dacă obiectul are o valoare mai mică, atunci această metodă returnează o valoare negativă.
- Dacă obiectul are o valoare mai mare, returnează o valoare pozitivă.
Un exemplu de comparabil în Java
Următorul program de Java un exemplu comparabil arată compararea a două caractere, „a” și „b”. Caracterul „a” vine înaintea „b” în ordine alfabetică.
Prin urmare, ieșirea este -1. Caracterul „b” vine după „a” în ordine alfabetică. Prin urmare, rezultatul este 1. Caracterele „a” și „b” sunt ambele echivalente. Prin urmare, ieșirea este 0.
public class Sample_String { public static void main(String[] args) { String str_Sample = "a"; System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b")); str_Sample = "b"; System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a")); str_Sample = "b"; System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b")); } }
producție
Compare To 'a' b is : -1 Compare To 'b' a is : 1 Compare To 'b' b is : 0
În ce este un comparator Java?
Un comparator in Java este un obiect pentru compararea diferitelor obiecte din diferite clase. Interfața comparatorului în Java este, de asemenea, folosit pentru a aranja obiectele claselor definite de utilizator. Include două metode importante de interfață de comparare cunoscute sub numele de compare (Object obj1, Object obj2) și equals (Object element).
Metoda utilizată în Comparator
În practica mea, mă bazez frecvent pe următoarele metode critice ale interfeței comparatorului:
Comparaţie():
Compare()
vă permite să comandați obiecte. Pentru a face acest lucru, trebuie să creați o clasă care implementează o interfață de comparație. După aceasta, trebuie să înlocuiți metoda de comparare.
Sintaxa lui compare()
metoda este urmatoarea:
compare(Object obj1, Object obj2)
În sintaxa de mai sus, obj1 și obj2 sunt două obiecte pe care trebuie să le comparați folosind metoda compare(). compare()
metodă.
ieșire:
- Returnează un număr întreg negativ dacă primul argument este mai mic decât al doilea.
- Returnează zero dacă primul argument și al doilea argument sunt egale.
- Această metodă poate returna un număr întreg pozitiv în cazul în care primul argument este mai mare decât al doilea.
Trebuie să vă asigurați că relația este tranzitivă. De exemplu, ((compara(a, b)>0) && (compara(b, c)>0)) care implică compara(a, c)>0.
Un exemplu de comparabil în Java
În cele de mai jos Java exemplu de comparație, există 6 variabile. „x”, „y”, „p”, „q”, „r” și „s”. Ieșirea este -1 deoarece valoarea lui „x”, 20 este mai mică decât valoarea lui „y”, 30. Ieșirea este 0 deoarece valoarea lui „p”, 40 este egală cu valoarea „q”, 40 .
import java.lang.Integer; public class example { public static void main(String args[]) { int x = 20; int y = 30; // as 10 less than 20, // Output will be a value less than zero System.out.println(Integer.compare(x, y)); int p = 40; int q = 40; // as 30 equals 30, // Output will be zero System.out.println(Integer.compare(p, q)); int r = 20; int s = 7; // as 15 is greater than 8, // Output will be a value greater than zero System.out.println(Integer.compare(r, s)); } }
ieșire:
-1 0 1
Egal():
Equals()
verifică dacă obiectul număr este egal cu obiectul, care este transmis ca argument sau nu.
Sintaxa lui equals()
metoda este urmatoarea:
public boolean equals(Object o)
Această metodă ia doi parametri: 1) orice obiect și 2) o valoare returnată. Returnează adevărat dacă argumentul transmis nu este nul și este un obiect de tip similar având aceeași valoare numerică.
Exemplu metoda Equals:
În exemplul de mai jos, voi compara cele patru variabile între ele. Trei variabile sunt de tip întreg, iar una este de tip scurt. Primul rezultat este fals deoarece valoarea lui p, care este 5, nu este egală cu valoarea lui q, care este 20.
Al doilea rezultat este adevărat deoarece valoarea variabilelor p și r este aceeași, care este 5. În sfârșit, rezultatul este fals, deoarece variabilele p și s au valori atribuite diferite.
public class Test { public static void main(String args[]) { Integer p = 5; Integer q = 20; Integer r =5; Short s = 5; System.out.println(p.equals(q)); System.out.println(p.equals(r)); System.out.println(p.equals(s)); } }
producție
false true false
Diferențele dintre comparabil și comparator în Java
Văd adesea confuzie între Java Comparabil și Comparator; iată diferența principală:
Baza de comparație | Comparabil | Comparator |
---|---|---|
Metodă | Furnizează comparabil compareTo() metoda de sortare a elementelor Java. |
Comparatorul oferă compare() metoda de sortare a elementelor Java. |
Pachet | O interfață comparabilă este prezentă în java.lang pachet. |
O interfață de comparație este prezentă în java.util pachet. |
Logica sortării | Logica sortării trebuie să fie în aceeași clasă cu obiectul pe care urmează să îl sortați. | Logica sortării ar trebui să fie în clase separate pentru a scrie diferite sortări bazate pe diferite atribute ale obiectelor. |
Obiect de clasă | Clasa ale cărei obiecte doriți să le sortați trebuie să implementeze interfața Comparable. | O clasă ale cărei obiecte doriți să le sortați nu trebuie să implementeze o interfață de comparație. |
Secvențele de sortare | Oferă secvențe de sortare unice. | Oferă mai multe secvențe de sortare. |
Ordine de sortare | Această metodă poate sorta datele după ordinea naturală de sortare. | Această metodă sortează datele în funcție de ordinea de sortare personalizată. |
Clasă | Afectează clasa inițială. adică, clasa reală este modificată. | Nu afectează clasa originală, adică clasa reală nu este modificată. |
Folosire | Implementat frecvent în API prin Calendar, clase Wrapper, Date și Şir. |
Este implementat pentru a sorta instanțe ale claselor terțe. |
aplica | Toate clasele wrapper și clasele de șiruri implementează interfețe comparabile. | Singurele clase implementate de Comparator sunt Collator și RuleBasedColator. |
Cele mai bune practici în timpul utilizării Comparator și Comparable în Java
- Utilizați o interfață comparabilă atunci când comparația este standard pentru o anumită clasă.
- Puteți utiliza lambda cu un comparator.
- Multe dintre clasele de bază disponibile implementează o interfață comparabilă.
- Este posibil să utilizați TreeSet și TreeMap în timp ce sortați Set sau Map.
-
compareTo()
metoda funcționează atât cu comparator, cât și cu comparabil. - Utilizați interfața de comparație numai atunci când < aveți nevoie de mai multă flexibilitate.
-
compareTo()
metoda va returna un număr întreg pozitiv dacă primul obiect este mai mare decât celălalt, negativ dacă este mai mic și zero dacă ambele sunt la fel.
Cum să alegi între un comparabil și un comparator
În mod concludent, experiența mea practică sugerează că folosirea Comparabil și Comparator în Java mărește semnificativ controlul pe care îl avem asupra sortării datelor, îmbunătățind atât performanța, cât și funcționalitatea.