Vergleichbar vs. Komparator in Java

Hauptunterschied zwischen vergleichbar und Komparator in Java

  • Vergleichbar in Java ist ein Objekt zum Vergleichen mit einem anderen Objekt, während Comparator ein Objekt zum Vergleichen verschiedener Objekte verschiedener Klassen ist.
  • Vergleichbar bietet das compareTo() Methode zum Sortieren von Elementen in Java, während Comparator die compare() Methode zum Sortieren von Elementen in Java.
  • Eine vergleichbare Schnittstelle ist in vorhanden java.lang Paket, während die Comparator-Schnittstelle in vorhanden ist java.util Paket.
  • Comparable bietet eine einzelne Sortiersequenz, während Comparator mehrere Sortiersequenzen bereitstellt.
  • Comparable wirkt sich auf die Originalklasse aus, wohingegen Comparator keinen Einfluss auf die Originalklasse hat.

Unterschied zwischen Vergleichbar und Vergleicher
Unterschied zwischen Vergleichbar und Vergleicher

Hier habe ich den Unterschied zwischen Vergleichs- und Vergleichsmodell analysiert und werde deren Vor- und Nachteile umfassend bewerten.

Was ist vergleichbar in Java?

Vergleichbar in Java ist ein Objekt, das sich mit einem anderen Objekt vergleicht. Es hilft, die Liste der benutzerdefinierten Objekte zu sortieren. Das Java.lang.Die vergleichbare Schnittstelle sollte von einer Klasse implementiert werden, um ihre Instanzen vergleichen zu können. Ein Array von Objekten, die eine vergleichbare Schnittstelle implementieren, wird automatisch sortiert nach Arrays.sort und deine Collections.sort Methoden.

In Comparable verwendete Methode

Ich möchte eine wichtige Methode hervorheben, die ich häufig in der Comparable-Schnittstelle verwende:

Vergleichen mit():

CompareTo()-Methode wird verwendet, um eine natürliche Sortierung einer Zeichenfolge durchzuführen. Die Bedeutung der natürlichen Sortierung ist die Sortierreihenfolge, die für das Objekt gilt, z. B. numerische Reihenfolge für die Sortierung von Ganzzahlen, alphabetische Reihenfolge für Zeichenfolgen usw.

Die Syntax von CompareTo() Methode ist wie folgt:

int compareTo(T obj)

In der obigen Syntax bezeichnet T den Typ der Objekte, die Sie vergleichen möchten.

CompareTo() Methode vergleicht das Objekt mit T-Objekt.

Ausgang:

  • Es gibt 0 zurück, wenn die Werte gleich sind.
  • Wenn das Objekt einen niedrigeren Wert hat, gibt diese Methode einen negativen Wert zurück.
  • Wenn das Objekt einen höheren Wert hat, gibt es einen positiven Wert zurück.

Ein Beispiel für Vergleichbares in Java

Das folgende Programm von Java Ein vergleichbares Beispiel zeigt den Vergleich zweier Zeichen, „a“ und „b“. Das Zeichen „a“ steht im Alphabet vor „b“.

Daher ist die Ausgabe -1. Das Zeichen „b“ steht alphabetisch nach „a“. Daher ist die Ausgabe 1. Die Zeichen „a“ und „b“ sind beide gleichwertig. Daher ist die Ausgabe 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"));
    }
}

Ausgang

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

Was ist ein Komparator in Java?

Ein Vergleicher in Java ist ein Objekt zum Vergleichen verschiedener Objekte unterschiedlicher Klassen. Die Komparatorschnittstelle in Java wird auch verwendet, um die Objekte benutzerdefinierter Klassen anzuordnen. Es enthält zwei wichtige Vergleichsschnittstellenmethoden, die als „compare“ (Objekt obj1, Objekt obj2) und „equals“ (Objektelement) bezeichnet werden.

Im Komparator verwendete Methode

In meiner Praxis greife ich häufig auf die folgenden kritischen Methoden der Komparatorschnittstelle zurück:

Vergleichen():

Compare() ermöglicht es Ihnen, Objekte zu bestellen. Dazu müssen Sie eine Klasse erstellen, die eine Komparatorschnittstelle implementiert. Danach müssen Sie die Vergleichsmethode überschreiben.

Die Syntax des compare() Methode ist wie folgt:

compare(Object obj1, Object obj2)

In der obigen Syntax sind obj1 und obj2 zwei Objekte, die Sie mit der Methode „compare()“ vergleichen müssen. compare() Methode.

Ausgang:

  • Es gibt eine negative Ganzzahl zurück, wenn das erste Argument kleiner als das zweite ist.
  • Gibt Null zurück, wenn das erste Argument und das zweite Argument gleich sind.
  • Diese Methode kann eine positive Ganzzahl zurückgeben, falls das erste Argument größer als das zweite ist.

Sie müssen sicherstellen, dass die Beziehung transitiv ist. Zum Beispiel ((compare(a, b)>0) && (compare(b, c)>0)), was impliziert, dass compare(a, c)>0 ist.

Ein Beispiel für Vergleichbares in Java

Im Folgenden Java Komparator Beispiel gibt es 6 Variablen. „x“, „y“, „p“, „q“, „r“ und „s“. Die Ausgabe ist -1, da der Wert von „x“ ist, 20 ist kleiner als der Wert von „y“, 30. Die Ausgabe ist 0, weil der Wert von „p“, 40, gleich dem Wert von „q“, 40 ist .

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

Ausgang:

-1
0
1

Gleich():

Equals() prüft, ob das Zahlenobjekt gleich dem Objekt ist, das als Argument übergeben wird, oder nicht.

Die Syntax des equals() Methode ist wie folgt:

public boolean equals(Object o)

Diese Methode benötigt zwei Parameter: 1) ein beliebiges Objekt und 2) einen Rückgabewert. Es gibt „true“ zurück, wenn das übergebene Argument nicht null ist und ein Objekt eines ähnlichen Typs mit demselben numerischen Wert ist.

Beispiel für die Equals-Methode:

Im folgenden Beispiel vergleiche ich die vier Variablen miteinander. Drei Variablen sind vom Typ Integer und eine vom Typ Short. Das erste Ergebnis ist falsch, da der Wert von p, der 5 beträgt, nicht mit dem Wert von q, der 20 beträgt, übereinstimmt.

Das zweite Ergebnis ist wahr, weil der Wert der Variablen p und r gleich ist, nämlich 5. Schließlich ist die Ausgabe falsch, da den Variablen p und s unterschiedliche Werte zugewiesen sind.

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

Ausgang

false
true
false

Unterschiede zwischen Comparable und Comparator in Java

Ich sehe oft Verwechslungen zwischen Java Comparable und Comparator; hier ist der Hauptunterschied:

 

Unterschied zwischen Comparable und Comparator in Java
Unterschied zwischen Comparable und Comparator in Java

 

Vergleichsbasis Vergleichbar Comparator
Method Vergleichbare Angebote compareTo() Methode zum Sortieren von Elementen in Java. Komparator bietet compare() Methode zum Sortieren von Elementen in Java.
Paket Eine vergleichbare Schnittstelle ist in vorhanden java.lang Paket. Eine Komparatorschnittstelle ist vorhanden java.util Paket.
Logik des Sortierens Die Sortierlogik muss in derselben Klasse liegen wie das Objekt, das Sie sortieren möchten. Die Sortierlogik sollte in separaten Klassen erfolgen, um unterschiedliche Sortierungen basierend auf unterschiedlichen Objektattributen zu schreiben.
Klassenobjekt Die Klasse, deren Objekte Sie sortieren möchten, muss die Comparable-Schnittstelle implementieren. Eine Klasse, deren Objekte Sie sortieren möchten, muss keine Komparatorschnittstelle implementieren.
Reihenfolgen sortieren Es bietet einzelne Sortierreihenfolgen. Es bietet mehrere Sortierfolgen.
Sortierreihenfolge Mit dieser Methode können die Daten gemäß der natürlichen Sortierreihenfolge sortiert werden. Diese Methode sortiert die Daten entsprechend der benutzerdefinierten Sortierreihenfolge.
Klasse Es betrifft die ursprüngliche Klasse. Das heißt, die tatsächliche Klasse wird geändert. Es wirkt sich nicht auf die ursprüngliche Klasse aus, dh die tatsächliche Klasse wird nicht verändert.
Anwendungsbereich Wird häufig in der API nach Kalender, Wrapper-Klassen, Datum usw. implementiert
String
Es ist implementiert, um Instanzen von Klassen von Drittanbietern zu sortieren.
Implementierung Alle Wrapper-Klassen und String-Klassen implementieren vergleichbare Schnittstellen. Die einzigen implementierten Klassen von Comparator sind Collator und RuleBasedColator.

Best Practices bei der Verwendung von Comparator und Comparable in Java

  • Verwenden Sie eine vergleichbare Schnittstelle, wenn der Vergleich für die jeweilige Klasse Standard ist.
  • Sie können Lambdas mit einem Komparator verwenden.
  • Viele der verfügbaren Kernklassen implementieren eine vergleichbare Schnittstelle.
  • Es ist möglich, TreeSet und TreeMap beim Sortieren von Set oder Map zu verwenden.
  • Die compareTo() Die Methode funktioniert sowohl mit Komparatoren als auch mit Vergleichsmethoden.
  • Verwenden Sie die Komparatorschnittstelle nur, wenn Sie < mehr Flexibilität benötigen.
  • Die compareTo() Die Methode gibt eine positive Ganzzahl zurück, wenn das erste Objekt größer als das andere ist, negativ, wenn es kleiner ist, und Null, wenn beide gleich sind.

So wählen Sie zwischen einem Vergleichsobjekt und einem Komparator

Zusammenfassend lässt sich sagen, dass meine praktische Erfahrung zeigt, dass die Nutzung von Comparable und Comparator in Java erhöht unsere Kontrolle über die Datensortierung erheblich und verbessert sowohl Leistung als auch Funktionalität.