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

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

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

Τι είναι Συγκρίσιμο στην Java;

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

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

Το Following είναι μια σημαντική μέθοδος που χρησιμοποιείται στη διεπαφή Comparable:

CompareTo():

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

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

int compareTo(T obj)

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

CompareTo() μέθοδος σύνθares το αντικείμενο με Τ obj.

Παραγωγή:

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

Παράδειγμα συγκρίσιμου σε Java

Το Following πρόγραμμα της 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

Τι είναι το Comparator στην Java;

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

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

Following είναι οι σημαντικές μέθοδοι που χρησιμοποιούνται στη διεπαφή σύγκρισης:

Συγκρίνω():

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

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

compare(Object obj1, Object obj2)

Στην παραπάνω σύνταξη, το obj1 και το obj2 είναι δύο αντικείμενα που πρέπει να συγκρίνετε χρησιμοποιώντας 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 εάν το όρισμα που πέρασε δεν είναι μηδενικό και είναι αντικείμενο παρόμοιου τύπου με την ίδια αριθμητική τιμή.

Παράδειγμα μεθόδου 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 Comparable και Comparator:

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

Βέλτιστες πρακτικές κατά τη χρήση του Comparator και του Comparable σε Java

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