Συγκρίσιμο vs Συγκριτικό σε Java

Βασική διαφορά μεταξύ συγκρίσιμου και συγκριτή σε Java

  • Συγκρίσιμο σε Java είναι ένα αντικείμενο για σύγκριση με άλλο αντικείμενο, ενώ το Comparator είναι ένα αντικείμενο σύγκρισης διαφορετικών αντικειμένων διαφορετικών κλάσεων.
  • Συγκρίσιμο παρέχει το compareTo() μέθοδος ταξινόμησης στοιχείων Java, ενώ το Comparator παρέχει το compare() μέθοδος ταξινόμησης στοιχείων Java.
  • Μια συγκρίσιμη διεπαφή υπάρχει στο java.lang πακέτο, ενώ η διεπαφή Comparator υπάρχει στο java.util πακέτο.
  • Το Comparable παρέχει μια ενιαία ακολουθία ταξινόμησης, ενώ το Comparator παρέχει πολλαπλές ακολουθίες ταξινόμησης.
  • Το Comparable επηρεάζει την αρχική κλάση, ενώ το Comparator δεν επηρεάζει την αρχική κλάση.

Διαφορά μεταξύ συγκρίσιμου και συγκριτή
Διαφορά μεταξύ συγκρίσιμου και συγκριτή

Εδώ, έχω αναλύσει τη διαφορά μεταξύ συγκρίσιμου και συγκριτή και θα αξιολογήσω διεξοδικά τα πλεονεκτήματα και τα μειονεκτήματά τους.

Τι είναι συγκρίσιμο σε Java?

Συγκρίσιμος in Java είναι ένα αντικείμενο που συγκρίνει τον εαυτό του με ένα άλλο αντικείμενο. Βοηθά στην ταξινόμηση της λίστας προσαρμοσμένων αντικειμένων. Ο Java.lang.Η συγκρίσιμη διεπαφή θα πρέπει να υλοποιείται από μια κλάση για να συγκρίνονται οι παρουσίες της. Μια σειρά αντικειμένων που υλοποιούν μια συγκρίσιμη διεπαφή ταξινομείται αυτόματα κατά Arrays.sort και Collections.sort μεθόδους.

Μέθοδος που χρησιμοποιείται στο Comparable

Θα ήθελα να επισημάνω μια σημαντική μέθοδο που χρησιμοποιώ συχνά στη διεπαφή Συγκρίσιμη:

CompareTo():

Η μέθοδος CompareTo() χρησιμοποιείται για την εκτέλεση φυσικής ταξινόμησης σε μια συμβολοσειρά. Η έννοια της φυσικής ταξινόμησης είναι η σειρά ταξινόμησης που ισχύει για το αντικείμενο, π.χ. αριθμητική σειρά ταξινόμησης ακεραίων, αλφαβητική σειρά για συμβολοσειρά κ.λπ.

Η σύνταξη του CompareTo() μέθοδος είναι η εξής:

int compareTo(T obj)

Στην παραπάνω σύνταξη, το T υποδηλώνει τον τύπο των αντικειμένων που πρόκειται να συγκρίνετε.

CompareTo() Η μέθοδος συγκρίνει το αντικείμενο με το T obj.

Παραγωγή:

  • Επιστρέφει 0 εάν οι τιμές είναι ίσες.
  • Εάν το αντικείμενο έχει χαμηλότερη τιμή, τότε αυτή η μέθοδος επιστρέφει αρνητική τιμή.
  • Εάν το αντικείμενο έχει υψηλότερη τιμή, επιστρέφει μια θετική τιμή.

Ένα παράδειγμα συγκρίσιμου σε Java

Το παρακάτω πρόγραμμα του Java συγκρίσιμο παράδειγμα δείχνει τη σύγκριση δύο χαρακτήρων, "a" και "b". Ο χαρακτήρας «α» μπαίνει πριν από το «β» αλφαβητικά.

Επομένως, η έξοδος είναι -1. Ο χαρακτήρας «β» μπαίνει μετά το «α» αλφαβητικά. Ως εκ τούτου, η έξοδος είναι 1. Οι χαρακτήρες "a" και "b" είναι και οι δύο ισοδύναμοι. Επομένως, η έξοδος είναι 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"));
    }
}

Παραγωγή

Compare To 'a' b is : -1
Compare To 'b' a is : 1
Compare To 'b' b is : 0

Τι είναι ο συγκριτής σε Java?

Συγκριτής in Java είναι ένα αντικείμενο για τη σύγκριση διαφορετικών αντικειμένων διαφορετικών κλάσεων. Η διεπαφή σύγκρισης σε Java χρησιμοποιείται επίσης για τη διευθέτηση των αντικειμένων κλάσεων που ορίζονται από το χρήστη. Περιλαμβάνει δύο σημαντικές μεθόδους διεπαφής σύγκρισης γνωστές ως compare (Object obj1, Object obj2) και equals (Object element).

Μέθοδος που χρησιμοποιείται στο Comparator

Στην πρακτική μου, βασίζομαι συχνά στις ακόλουθες κρίσιμες μεθόδους της διεπαφής σύγκρισης:

Συγκρίνω():

Compare() σας δίνει τη δυνατότητα να παραγγείλετε αντικείμενα. Για να γίνει αυτό, πρέπει να δημιουργήσετε μια κλάση που υλοποιεί μια διεπαφή σύγκρισης. Μετά από αυτό, πρέπει να παρακάμψετε τη μέθοδο σύγκρισης.

Η σύνταξη του compare() μέθοδος είναι η εξής:

compare(Object obj1, Object obj2)

Στην παραπάνω σύνταξη, το obj1 και το obj2 είναι δύο αντικείμενα που πρέπει να συγκρίνετε χρησιμοποιώντας τη μέθοδο compare(). compare() μέθοδος.

Παραγωγή:

  • Επιστρέφει αρνητικό ακέραιο αν το πρώτο όρισμα είναι μικρότερο από το δεύτερο.
  • Επιστρέφει μηδέν εάν το πρώτο όρισμα και το δεύτερο όρισμα είναι ίσα.
  • Αυτή η μέθοδος μπορεί να επιστρέψει έναν θετικό ακέραιο στην περίπτωση που το πρώτο όρισμα είναι μεγαλύτερο από το δεύτερο.

Πρέπει να βεβαιωθείτε ότι η σχέση είναι μεταβατική. Για παράδειγμα, ((compare(a, b)>0) && (compare(b,c)>0)) που υποδηλώνει compare(a,c)>0.

Ένα παράδειγμα συγκρίσιμου σε Java

Στο παρακάτω Java παράδειγμα σύγκρισης, υπάρχουν 6 μεταβλητές. «x», «y», «p», «q», «r» και «s». Η έξοδος είναι -1 ως τιμή του "x", το 20 είναι μικρότερο από την τιμή του "y", 30. Η έξοδος είναι 0 επειδή η τιμή του "p", 40 είναι ίση με την τιμή του "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)); 
    } 
}

Παραγωγή:

-1
0
1

Equals():

Equals() επαληθεύει εάν το αριθμητικό αντικείμενο είναι ίσο με το αντικείμενο, το οποίο μεταβιβάζεται ως όρισμα ή όχι.

Η σύνταξη του equals() μέθοδος είναι η εξής:

public boolean equals(Object o)

Αυτή η μέθοδος παίρνει δύο παραμέτρους: 1) οποιοδήποτε αντικείμενο και 2) μια τιμή επιστροφής. Επιστρέφει true εάν το όρισμα που πέρασε δεν είναι null και είναι αντικείμενο παρόμοιου τύπου με την ίδια αριθμητική τιμή.

Παράδειγμα μεθόδου Equals:

Στο παρακάτω παράδειγμα, θα συγκρίνω τις τέσσερις μεταβλητές μεταξύ τους. Τρεις μεταβλητές είναι τύπου ακέραιος και η μία είναι τύπου short. Το πρώτο αποτέλεσμα είναι ψευδές καθώς η τιμή του p, που είναι 5, δεν είναι ίση με την τιμή του q, που είναι 20.

Το δεύτερο αποτέλεσμα είναι αληθές επειδή η τιμή των μεταβλητών p και r είναι η ίδια, που είναι 5. Τέλος, η έξοδος είναι ψευδής, καθώς οι μεταβλητές p και s έχουν διαφορετικές εκχωρημένες τιμές.

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

Παραγωγή

false
true
false

Διαφορές μεταξύ συγκρίσιμου και συγκριτή σε Java

Συχνά βλέπω σύγχυση μεταξύ Java Συγκρίσιμο και Συγκριτικό. εδώ είναι η κύρια διαφορά:

Διαφορά μεταξύ συγκρίσιμου και συγκριτή σε Java
Διαφορά μεταξύ συγκρίσιμου και συγκριτή σε Java

Βάση σύγκρισης Συγκρίσιμος Ο συγκριτής
Μέθοδος Συγκρίσιμο παρέχει compareTo() μέθοδος ταξινόμησης στοιχείων Java. Ο συγκριτής παρέχει compare() μέθοδος ταξινόμησης στοιχείων Java.
Πακέτο Μια συγκρίσιμη διεπαφή υπάρχει στο java.lang πακέτο. Υπάρχει μια διεπαφή σύγκρισης java.util πακέτο.
Λογική Διαλογής Η λογική της ταξινόμησης πρέπει να είναι στην ίδια κατηγορία με το αντικείμενο που πρόκειται να ταξινομήσετε. Η λογική της ταξινόμησης θα πρέπει να είναι σε ξεχωριστές κλάσεις για να γράφονται διαφορετικά είδη με βάση διαφορετικά χαρακτηριστικά αντικειμένων.
Αντικείμενο τάξης Η κλάση της οποίας τα αντικείμενα θέλετε να ταξινομήσετε πρέπει να εφαρμόσει τη διεπαφή Comparable. Μια κλάση της οποίας τα αντικείμενα θέλετε να ταξινομήσετε δεν χρειάζεται να εφαρμόσει μια διεπαφή σύγκρισης.
Ακολουθίες ταξινόμησης Παρέχει μεμονωμένες αλληλουχίες ταξινόμησης. Παρέχει πολλαπλές ακολουθίες ταξινόμησης.
Σειρά ταξινόμησης Αυτή η μέθοδος μπορεί να ταξινομήσει τα δεδομένα σύμφωνα με τη φυσική σειρά ταξινόμησης. Αυτή η μέθοδος ταξινομεί τα δεδομένα σύμφωνα με την προσαρμοσμένη σειρά ταξινόμησης.
Τάξη Επηρεάζει την αρχική τάξη. δηλαδή, η πραγματική τάξη αλλάζει. Δεν επηρεάζει την αρχική κλάση, δηλαδή, η πραγματική κλάση δεν αλλάζει.
Χρήση Εφαρμόζεται συχνά στο API ανά Ημερολόγιο, κλάσεις Wrapper, Ημερομηνία και
Σειρά.
Εφαρμόζεται για την ταξινόμηση παρουσιών κλάσεων τρίτων.
Εφαρμογή Όλες οι κατηγορίες περιτυλίγματος και οι κλάσεις συμβολοσειρών υλοποιούν συγκρίσιμες διεπαφές. Οι μόνες κλάσεις του Comparator που υλοποιούνται είναι το Collator και το RuleBasedColator.

καλυτερα Πρακτικές κατά τη χρήση του συγκριτή και του συγκρίσιμου σε Java

  • Χρησιμοποιήστε μια συγκρίσιμη διεπαφή όταν η σύγκριση είναι τυπική για τη συγκεκριμένη κλάση.
  • Μπορείτε να χρησιμοποιήσετε λάμδα με συγκριτικό.
  • Πολλές από τις διαθέσιμες κλάσεις πυρήνα εφαρμόζουν μια συγκρίσιμη διεπαφή.
  • Είναι δυνατή η χρήση TreeSet και TreeMap κατά την ταξινόμηση του συνόλου ή του χάρτη.
  • Τα Διαχωριστικά compareTo() Η μέθοδος λειτουργεί με συγκριτικό αλλά και συγκρίσιμο.
  • Χρησιμοποιήστε τη διεπαφή σύγκρισης μόνο όταν < χρειάζεστε περισσότερη ευελιξία.
  • Τα Διαχωριστικά compareTo() Η μέθοδος θα επιστρέψει έναν θετικό ακέραιο εάν το πρώτο αντικείμενο είναι μεγαλύτερο από το άλλο, αρνητικό εάν είναι χαμηλότερο και μηδέν εάν και τα δύο είναι ίδια.

Πώς να επιλέξετε μεταξύ συγκρίσιμου και συγκριτή

Συμπερασματικά, η πρακτική εμπειρία μου υποδηλώνει ότι η χρήση του Comparable και του Comparator Java αυξάνει σημαντικά τον έλεγχο που έχουμε στην ταξινόμηση δεδομένων, βελτιώνοντας τόσο την απόδοση όσο και τη λειτουργικότητα.