Vergleichbare Einführung
Vergleichbar ist die Sortierschnittstelle.
Wenn eine Klasse die vergleichbare Schnittstelle implementiert, bedeutet dies, dass "diese Klasse unterstützt". Da Klassen, die eine vergleichbare Schnittstellen -Unterstützung implementieren, die Sortierung des Sortierens unter der Annahme, dass es jetzt eine "Listenliste (oder ein Array) von Objekten von Klassen gibt, die eine vergleichbare Schnittstelle implementieren", können die Liste (oder ein Array) nach Collections.sort (oder Arrays.Sort) sortiert werden.
Zusätzlich kann "Objekt der Klasse, das die vergleichbare Schnittstelle implementiert", als Schlüssel in der "geordneten Karte (wie Treemap)" oder als Element im "geordneten Satz (Treeset)" verwendet werden, ohne einen Komparator anzugeben.
1. Vergleicher und vergleichbar sind gleich
Sie sind alle Java -Schnittstellen und werden verwendet, um Größen von benutzerdefinierten Klassen zu vergleichen.
Was ist eine benutzerdefinierte Klasse: wie eine Person im öffentlichen Klassen {String Name; int Alter}.
Wenn wir eine solche Personlist haben, die Person1, Person2, Person3 enthält.
Das erwartete Ergebnis wird nicht erzielt. Jemand muss zu diesem Zeitpunkt fragen, warum wir eine Zeichenfolgenliste sortieren können:
Zum Beispiel kann StringList {"Hello1", "Hello3", "Hello2"}, Collections.sort (StringList) die richtige Sortierung erhalten, das liegt daran
Das String -Objekt hat uns geholfen, die vergleichbare Schnittstelle zu implementieren. Wenn unsere Person sortieren möchte, müssen wir auch einen Komparator implementieren.
2. Der Unterschied zwischen Komparator und Vergleichbar
Vergleichbar
Vergleichbar ist in der Personklasse definiert:
Public Class Persion implementiert vergleichbar {..compare die Größe der Person ...},
Da der Komparator implementiert wurde, ist unsere Person jetzt ein Objekt, das Größen vergleichen kann. Die Vergleichsfunktion ist genau die gleiche wie String und kann jederzeit und überall verglichen werden, da die Person jetzt eine andere Größe hat. Collections.sort (Personlist) kann das richtige Ergebnis erzielen.
Vergleicher
Der Komparator ist außerhalb der Person definiert. Zu diesem Zeitpunkt muss die Struktur unserer Personklasse keine Änderungen ändern, wie z.
public class Person {String Name; int Alter},Dann definieren wir einen anderen Komparator:
public person comparator implementiert vergleicher () {..compare die Größe der Person ...}, So vergleichen Sie die Größen von zwei Personen im Personalvergleich. Mit dieser Methode, wenn wir eine Personlist sortieren möchten, möchten wir also sortieren.
Zusätzlich zur Übergabe der Personliste müssen wir auch Person Comparator übergeben, denn die Vergleich der Personengröße ist personellvergleichend ist
Implementiert in, wie::
Collections.sort (Personlist, neuer personcomparator ()).
3. Beispiele für Vergleiche und vergleichbar
Vergleichbar:
Um die vergleichbare Schnittstelle zu implementieren, müssen Sie die Vergleichsmethode überschreiben. Implementieren Sie den Vergleich in der Vergleichsmethode:
public class Person implementiert vergleichbar {String name; int age; public int vergleicheto (Person Another) {int i = 0; i = name.comPareto (ein anderer.name); // Vergleich unter Verwendung von Zeichenfolgen if (i == 0) {// Wenn die Namen gleich sind, vergleichen Sie das Alter, Return -Ergebnis -Return -Alter - eine andere .age;} else {return i; // Die Namen sind unterschiedlich, geben Sie das Ergebnis des Vergleichs von Namen zurück.}}}Zu diesem Zeitpunkt können wir es direkt mit Collections.sort (Personlist) sortieren.
Vergleicher:
Das Implementieren des Vergleichs erfordert das Überschreiben der Vergleichsmethode:
public class Person {String name; int ay;} class PersonComparator implementiert vergleicher <person> {public int compare (Person eins, Person Another) {int i = 0; i = One.name.comPareto (Another.Name); // Vergleich unter Verwendung von Zeichenfolgen if (i == 0) {// Wenn der Name der gleiche ist, vergleichen Sie das Alter, geben Sie das Ergebnis des Vergleichs des Alters zurück. // Die Namen sind unterschiedlich, geben Sie das Ergebnis des Vergleichs von Namen zurück.}}} Collectionss.sort (Personlist, neuer PersonComparator ()) Es kann sortiert werden4: Zusammenfassung
Beide Methoden haben ihre eigenen Vor- und Nachteile. Es ist einfach vergleichbar zu verwenden. Solange das Objekt, das die vergleichbare Schnittstelle implementiert, zu einem vergleichbaren Objekt wird, wird
Der Quellcode muss jedoch geändert werden. Der Vorteil der Verwendung des Vergleichs besteht darin, dass er den Quellcode nicht ändern muss, sondern auch einen Komparator implementiert. Wenn ein benutzerdefiniertes Objekt verglichen werden muss, kann der Komparator und das Objekt zusammen übergeben werden, um die Größe zu vergleichen. Im Vergleicher können Benutzer eine komplexe und allgemeine Logik selbst implementieren, damit sie mit einigen relativ einfachen Objekten übereinstimmen können, die viele sich wiederholende Arbeiten sparen können.