comparable comparator interfaces java
In diesem Tutorial wird das Konzept der vergleichbaren und vergleichenden Schnittstellen in Java anhand von Beispielen erläutert. Sie werden auch die Unterschiede zwischen den beiden kennenlernen:
In unseren früheren Tutorials haben wir alles über Schnittstellen gelernt. Eine Schnittstelle wird verwendet, um abstrakte Methoden und statische oder endgültige Variablen zu deklarieren. Standardmäßig sind Schnittstellenmethoden öffentlich. Seit Java 8 können in Schnittstellen auch statische und Standardmethoden definiert sein.
Java bietet verschiedene integrierte Schnittstellen, mit denen wir verschiedene Operationen ausführen können. In diesem Tutorial werden wir zwei solcher Schnittstellen diskutieren, d. H. Comparable und Comparator. Eine vergleichbare Schnittstelle wird zum Sortieren von Objekten gemäß der natürlichen Reihenfolge verwendet. Die Komparatorschnittstelle wird verwendet, um einzelne Attribute verschiedener Objekte zu sortieren.
=> Entdecken Sie hier die Simple Java Training Series.
Beginnen wir mit einer vergleichbaren Oberfläche.
Was du lernen wirst:
- Vergleichbare Schnittstelle in Java
- Komparatorschnittstelle In Java
- Unterschied zwischen vergleichbaren Vs Komparator
- Fazit
Vergleichbare Schnittstelle in Java
Eine vergleichbare Schnittstelle sortiert die Listenstrukturen wie Arrays und ArrayLists, die benutzerdefinierte Objekte enthalten. Sobald die Listenobjekte die Schnittstelle Comparable implementiert haben, können wir die Methode Collections.sort () oder Arrays.sort () für die Arrays verwenden, um den Inhalt zu sortieren.
Wenn wir jedoch benutzerdefinierte Klassen haben und deren Objekte sortieren müssen, müssen wir die Schnittstelle Comparable in dieser Klasse implementieren. Die vergleichbare Schnittstelle ist Teil der java.lang Paket. Diese Schnittstelle hat nur eine Methode, CompareTo (). Über eine vergleichbare Schnittstelle können wir jeweils ein einzelnes Datenelement sortieren.
Zum Beispiel, Wenn wir Name und Alter als Felder in unserer Klasse haben, können wir die Klassenobjekte entweder nach Name oder Alter sortieren. Wir können nicht gleichzeitig nach Name und Alter sortieren.
Wie oben erläutert, können wir die Comparable-Schnittstelle in Java implementieren, indem wir eine benutzerdefinierte Klasse zum Implementieren der Comparable-Schnittstelle haben. Die Schnittstelle 'Vergleichbar' verfügt nur über eine Methode 'compareTo', die in der Klasse überschrieben werden muss, um die benutzerdefinierten Objekte zu sortieren.
CompareTo-Methode
Die Methode 'compareTo' der Schnittstelle Comparable wird verwendet, um das aktuelle Objekt mit dem angegebenen Objekt zu vergleichen. Die allgemeine Syntax des compareTo-Objekts ist unten angegeben.
public int compareTo (Objekt obj)
Wie oben gezeigt, akzeptiert die compareTo-Methode ein Objekt als Argument (es kann sich um ein beliebiges benutzerdefiniertes Objekt handeln) und vergleicht es mit dem aktuellen Objekt, mit dem diese Methode aufgerufen wird.
Die compareTo-Methode gibt einen ganzzahligen Wert zurück, der einen der folgenden Werte annehmen kann:
- Positive (> 0) Ganzzahl => das aktuelle Objekt> der übergebene Objektparameter.
- Negativ (das aktuelle Objekt
- Null (= 0) => Das aktuelle Objekt und das angegebene Objekt sind beide gleich.
Wir können die compareTo () -Methode verwenden, um Folgendes zu sortieren:
- Objekte vom Typ String
- Wrapper-Klassenobjekte
- Benutzerdefinierte oder benutzerdefinierte Objekte
Lassen Sie uns nun ein Beispiel für eine vergleichbare Schnittstelle implementieren.
Vergleichbares Schnittstellenbeispiel
Das folgende Java-Programm implementiert eine Personenklasse, die Name und Alter als Mitgliedsfelder enthält. Diese Klasse implementiert eine vergleichbare Schnittstelle, mit der wir das Objekt der Klasse Person sortieren können.
Beachten Sie, dass wir beim Sortieren von benutzerdefinierten Objekten die Methode 'compareTo ()' der Schnittstelle 'Comparable' überschreiben müssen.
World of Warcraft Vanilla privater Server
Innerhalb der überschriebenen compareTo () -Methode vergleichen wir das Alter des übergebenen Personenobjekts mit dem des aktuellen Objekts und geben dementsprechend den Wert zurück.
Ein Beispiel für ein Java-Programm ist unten angegeben.
//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!'); } } }
Ausgabe:
Wie aus der Ausgabe hervorgeht, verwenden wir eine vergleichbare Schnittstelle, um zwei Objekte der Person-Klasse basierend auf der Altersmitgliedsvariablen zu vergleichen.
Wie der Name schon sagt, können wir über eine vergleichbare Schnittstelle ein Objekt mit dem anderen vergleichen, vorausgesetzt, die Objekte sind vom gleichen Typ. Solange die Objekte wissen, dass sie sich selbst anordnen können, können wir die Objekte einfach mit der einzigen Methode 'compareTo ()' sortieren, die zu dieser Schnittstelle gehört.
Java String CompareTo () Methode
Wir können auch die compareTo () -Methode verwenden, um zwei Objekte vom Typ String in Java zu vergleichen. Die beiden Zeichenfolgenobjekte werden lexikografisch verglichen, indem jedes Zeichen des Zeichenfolgenobjekts in das entsprechende Unicode-Zeichen konvertiert wird.
Wenn zwei Zeichenfolgen gleich sind, wird 0 zurückgegeben. Wenn das erste Objekt größer als das zweite Objekt ist, wird ein positiver Wert und ein negativer Wert zurückgegeben, wenn das erste Zeichenfolgenobjekt kleiner als das zweite Zeichenfolgenobjekt ist.
Zum Beispiel,
string1.compareTo (string2) vergleicht lexikographisch string1 und string2.
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); } }
Ausgabe:
Im obigen Programm haben wir gesehen, wie mit der compareTo () -Methode zwei Zeichenfolgen verglichen werden. Zuvor haben wir die Methode compareTo () verwendet, um die Ganzzahlwerte (z. B. Alter) zu vergleichen. In ähnlicher Weise können wir die anderen Datentypen wie Doubles mit der compareTo () -Methode verwenden.
Fahren wir nun mit der Comparator-Oberfläche in Java fort.
Komparatorschnittstelle In Java
Wir haben bereits die Funktionsweise der vergleichbaren Schnittstelle gesehen. Die vergleichbare Schnittstelle ermöglicht es uns, benutzerdefinierte Objekte basierend auf einem einzelnen Datenelement zu sortieren. Wenn jedoch die Anforderung besteht, das Objekt nach mehreren Feldern oder Datenelementen zu sortieren, können wir uns für eine Komparatorschnittstelle entscheiden.
Über die Komparatorschnittstelle können wir mehr als einen Komparator erstellen, je nachdem, wie viele Felder wir zum Sortieren der benutzerdefinierten Objekte verwenden möchten. Angenommen, wir möchten das benutzerdefinierte Objekt über die Komparatorschnittstelle nach zwei Mitgliedsfeldern, Name und Alter, sortieren, dann benötigen wir zwei Komparatoren, einen für den Namen und einen für das Alter.
Dann können wir mit diesen Komparatoren die Collections.sort () -Methode aufrufen.
Wie genau können wir die Komparatoren schreiben?
Betrachten Sie ein Beispiel eines Klassenschülers mit Namen und Alter als Feld. Beachten Sie, dass wir Schülerobjekte nach Namens- und Altersfeldern sortieren möchten.
Zu diesem Zweck müssen wir zuerst die Comparator-Klassen StudentAgeComparator und StudenNameComparator schreiben. In diesen Klassen überschreiben wir die compare () -Methode der Comparator-Schnittstelle und rufen dann die Collections.sort-Methode auf, wobei jeder dieser Komparatoren zum Sortieren von Schülerobjekten verwendet wird.
Die Komparatorschnittstelle enthält ein Vergleichsobjekt, mit dem Objekte zweier verschiedener Klassen verglichen werden. Die allgemeine Syntax der Vergleichsmethode lautet:
public int compare (Objekt obj1, Objekt obj2);
Die Vergleichsmethode vergleicht obj1 mit obj2.
Die Comparator-Schnittstelle ist Teil der java.util Paket und abgesehen von der Vergleichsmethode; Es enthält auch eine andere Methode namens equals.
Java-Komparator-Beispiel
Implementieren wir ein Komparator-Beispiel in Java. Wieder haben wir eine Schülerklasse mit Namen und Alter als Datenelemente genommen. Anschließend definieren wir eine Vergleichsklasse AgeComparator, die die Vergleichsmethode überschreibt, um das Alter von zwei Schülern zu vergleichen und entsprechende Werte zurückzugeben.
In der Hauptmethode erstellen wir eine Arrayliste mit Schülerobjekten. Dann rufen wir die Collections.sort-Methode mit ArrayList- und AgeComparator-Objekt als Argumente auf. Dadurch werden die Schülerobjekte nach Alter sortiert.
Das Java-Programm, das dieses Szenario implementiert, ist unten angegeben.
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); } } }
Ausgabe:
Im obigen Programm können wir, ähnlich wie wir AgeComparator geschrieben haben, um die Student-Objekte nach Alter zu sortieren, auch einen anderen NameComparator schreiben, um die Student-Objekte nach dem Namensfeld zu sortieren.
Auf diese Weise können wir so viele Komparatorklassen haben, wie zum Sortieren von Objekten in verschiedenen Feldern erforderlich sind. Durch die Art und Weise, wie wir zwei int-Variablen verglichen haben, können wir auch Variablen der anderen Datentypen mit der Compare-Methode vergleichen.
Unterschied zwischen vergleichbaren Vs Komparator
Vergleichbare Schnittstelle | Komparatorschnittstelle |
---|---|
Verwendet Collections.sort (Liste) zum Sortieren von Elementen. | Verwendet Collections.sort (Liste, Komparator), um die Elemente zu sortieren. |
Die vergleichbare Schnittstelle bietet eine Einzelfeldsortierung. | Die Komparatorschnittstelle bietet eine Sortierung mehrerer Felder. |
Eine vergleichbare Schnittstelle sortiert das Objekt nach natürlicher Reihenfolge. | Die Komparatorschnittstelle sortiert verschiedene Attribute verschiedener Objekte. |
Über eine vergleichbare Schnittstelle können wir das aktuelle Objekt 'this' mit dem angegebenen Objekt vergleichen. | Über eine Komparatorschnittstelle können wir Objekte verschiedener Klassen vergleichen. |
Teil des Pakets java.lang. | Teil des Pakets java.util. |
Die Verwendung einer vergleichbaren Schnittstelle ändert die tatsächliche Klasse. | Der Komparator ändert die ursprüngliche Klasse nicht. |
Bietet die compareTo () -Methode zum Sortieren von Elementen. | Bietet eine compare () -Methode zum Sortieren von Elementen. |
Häufig gestellte Fragen
F # 1) Ist eine funktionale Schnittstelle vergleichbar?
Antworten: Ja, vergleichbar ist eine funktionale Schnittstelle. Es deklariert eine einzelne abstrakte Methode, compareTo ().
F # 2) Wie macht man eine Klasse vergleichbar?
Antworten: Wir machen eine Klasse vergleichbar, indem wir die Schnittstelle Comparable implementieren. Innerhalb der Klasse überschreiben wir die compareTo () -Methode, um das Objekt zu sortieren. Wir übergeben ein Objekt und vergleichen es mit dem aktuellen Objekt.
Die Methode compareTo () gibt 0 zurück, wenn zwei Objekte gleich sind. Es wird eine negative Zahl zurückgegeben, wenn das erste Objekt kleiner als das zweite ist, und eine positive Zahl, wenn das erste Objekt größer als das zweite Objekt ist.
F # 3) Was ist der Hauptzweck der Comparator-Schnittstelle?
Antworten: Die Komparatorschnittstelle wird hauptsächlich zum Sortieren der benutzerdefinierten Objekte verwendet. Über eine Komparatorschnittstelle können auch Objekte verschiedener Klassen verglichen werden. Die Komparatorschnittstelle kann auch zum Sortieren von Objekten in mehreren Feldern verwendet werden.
F # 4) Warum wird Comparator in Java verwendet?
Antworten: Die Komparatorschnittstelle wird hauptsächlich verwendet, wenn für unsere benutzerdefinierten Objekte eine andere Sortierreihenfolge als die natürliche Reihenfolge basierend auf mehreren Feldern gewünscht wird.
F # 5) Was implementiert die vergleichbare Schnittstelle?
Antworten: Eine vergleichbare Schnittstelle wird von allen Wrapper-Klassen und der String-Klasse implementiert. Benutzerdefinierte Objekte verwenden auch die vergleichbare Schnittstelle zum Sortieren.
Fazit
In diesem Tutorial haben wir vergleichbare und vergleichende Schnittstellen in Java besprochen. Eine vergleichbare Schnittstelle wird verwendet, um die Objekte gemäß der natürlichen Reihenfolge zu sortieren, und kann jeweils nur die Objekte in einem Feld sortieren.
Die vergleichbare Schnittstelle verfügt über eine Methode 'compareTo ()', die in der Klasse, die die Comparator-Schnittstelle implementiert, überschrieben werden muss und deren Objekte sortiert werden sollen.
Über die Comparator-Oberfläche werden benutzerdefinierte Objekte sortiert, die nach einer anderen Reihenfolge sortiert werden sollen. Die Komparatorschnittstelle ermöglicht es uns auch, Objekte zweier verschiedener Klassen basierend auf mehreren Feldern zu sortieren.
=> Lesen Sie die Easy Java Training Series durch.
Literatur-Empfehlungen
- Java Interface und Abstract Class Tutorial mit Beispielen
- Set Interface In Java: Java Set Tutorial mit Beispielen
- Java-Bereitstellung: Erstellung und Ausführung einer Java-JAR-Datei
- Java-Grundlagen: Java-Syntax, Java-Klasse und Java-Kernkonzepte
- Java Virtual Machine: Wie JVM beim Ausführen von Java-Anwendungen hilft
- ListIterator-Schnittstelle in Java mit Beispielen
- Array von Objekten in Java: Erstellen, Initialisieren und Verwenden
- JAVA-Tutorial für Anfänger: Über 100 praktische Java-Video-Tutorials