Wann sollte eine Klasse Vergleichbare und / oder Vergleicher? [geschlossen]
-
10-07-2019 - |
Frage
Ich habe Klassen gesehen, die Umsetzung sowohl Vergleichbare und Vergleicher . Was bedeutet das? Warum sollte ich einen über den anderen verwenden?
Lösung
Der Text kommt unter Vergleicher vs Vergleichbare
Vergleichbare
Ein vergleichbares Objekt ist in der Lage sich mit einem anderen Objekt zu vergleichen. Die Klasse selbst muss die java.lang.Comparable
Schnittstelle implementiert, um der Lage sein, seine Instanzen zu vergleichen.
Vergleicher
Ein Komparator Objekt ist in der Lage den Vergleich von zwei verschiedenen Objekten. Die Klasse ist der Vergleich nicht seine Instanzen, aber einige Fälle, die andere Klasse. Diese Komparator Klasse muss die java.util.Comparator
-Schnittstelle implementieren.
Andere Tipps
Die Implementierung Comparable
bedeutet „ ich mich mit einem anderen Objekt vergleichen. “ Diese Regel ist nützlich, wenn es ein einziger natürlicher Standard Vergleich ist.
Die Implementierung Comparator
Mittel Dies ist in der Regel sinnvoll, wenn es mehr Möglichkeiten, den Vergleich von zwei Instanzen eines Typs „ kann ich zwei andere Objekte vergleichen .“ - z.B. Sie Menschen nach Alter, Namen usw. vergleichen können.
Vergleichbare lässt eine Klasse einen eigenen Vergleich implementieren:
- es ist in die gleiche Klasse (es ist oft ein Vorteil)
- kann es nur eine Implementierung (so können Sie nicht verwenden, wenn Sie zwei verschiedene Fälle wollen)
Zum Vergleich: Der Komparator ist ein externer Vergleich:
- es ist in der Regel in einer einzigartigen Instanz (entweder in der gleichen Klasse oder an einem anderen Ort)
- Sie Name jeder Implementierung mit der Art und Weise Sie wollen die Dinge sortieren
- Sie können Komparatoren für Klassen, die Sie kontrollieren nicht
- die Umsetzung ist verwendbar, auch wenn das erste Objekt null
In beiden Implementierungen, können Sie immer noch wählen, was Sie im Vergleich zu wollen . Mit Generika, können Sie erklären so, und haben es zum Zeitpunkt der Kompilierung geprüft. Dies verbessert die Sicherheit, aber es ist auch eine Herausforderung, den entsprechenden Wert zu bestimmen.
Als Richtwert ich verwende in der Regel die allgemeinste Klasse oder Schnittstelle, an der das Objekt verglichen werden könnte, in allen Anwendungsfällen Ich sehe ... Nicht sehr präzise eine obwohl Definition! : - (
-
Comparable<Object>
können Sie es in allen Codes zur Compile-Zeit verwenden (was gut ist, wenn nötig, oder schlecht, wenn nicht und Sie verlieren die Fehler bei der Kompilierung); Ihre Umsetzung hat mit Objekten und warf nach Bedarf aber in einer robusten Art und Weise. fertig zu werden
-
Comparable<Itself>
ist sehr streng, im Gegenteil.
Lustig, wenn Sie Sich zu Subklassen-Unterklasse, Subklasse auch vergleichbar sein müssen und darüber robust sein (oder es würde Liskov Prinzip brechen, und geben Sie Fehler Laufzeit).
java.lang.Comparable
-
Comparable
Schnittstelle implementieren, Klasse muss eine einzelne MethodecompareTo()
implementierenint a.compareTo(b)
-
Sie müssen die Klasse ändern, deren Instanz, die Sie sortieren möchten. So dass nur eine Sortierreihenfolge kann pro Klasse erstellt werden.
java.util.Comparator
-
Der Komparator-Schnittstelle zu implementieren, Klasse muss eine einzelne Methode
compare()
implementierenint compare (a,b)
- Sie bauen eine Klasse getrennt von Klasse, deren Instanz, die Sie sortieren möchten. So dass mehrere Sortierreihenfolge kann pro Klasse erstellt werden.
Comparable
ist für eine Standard-Bestellung auf Datenobjekten bereitstellt, zum Beispiel, wenn die Datenobjekte eine natürliche Ordnung haben.
Ein Comparator
stellt die Bestellung selbst für eine bestimmte Verwendung.
Comparable
ist in der Regel bevorzugt. Aber manchmal schon eine Klasse implementiert Comparable
, aber Sie wollen eine andere Eigenschaft sortieren. Dann sind Sie gezwungen, eine Comparator
zu verwenden.
Einige Klassen tatsächlich Hier sind einige Unterschiede zwischen dem Komparator und vergleichbare ich auf Web gefunden: Wenn Sie dann logischen Unterschied zwischen diesen beide sehen ist Vergleicher in Java vergleicht zwei Objekte zu ihm zur Verfügung gestellten, während vergleichbare Schnittstelle angegeben „diese“ Referenz mit dem Objekt vergleicht. Vergleichbare in Java verwendet natürliche Ordnung des Objekts zu implementieren. In Java API String, Datum und Wrapper-Klassen implementieren Comparable-Schnittstelle. Wenn eine Klasse Vergleichbare Schnittstelle in Java implementieren dann Sammlung des Objekts entweder Liste oder Array kann mit Collections.sort () oder Array.sort () -Methode und Objekt automatisch sortiert werden anhand von dort natürlich sortiert werden um durch CompareTo Methode definiert. Objekte, die Vergleichbar in Java implementieren kann als Schlüssel in einer sortierten Karte oder Elemente in einem sortierten Satz zum Beispiel TreeSet verwendet werden, ohne dass Vergleicher angeben. Website: Wie in Java Vergleicher und vergleichbar zu bedienen? Mit Beispiel Lesen Sie mehr: So verwenden Komparator und vergleichbar Java? Mit Beispiel Comparators
für gemeinsame Fälle liefern; zum Beispiel String
s sind durch Standardfall -sensitiven wenn sortiert, aber es gibt auch eine statische Comparator
genannt
Comparable
ist für Objekte mit einer natürlichen Ordnung. Das Objekt selbst weiß, wie es ist zu bestellen.
Comparator
ist für Objekte ohne eine natürliche Ordnung oder wenn Sie eine andere Ordnung verwenden.
Der Unterschied zwischen Komparator und vergleichbaren Schnittstellen
Comparable
wird verwendet, sich zu vergleichen mit einem anderen Objekt verwendet wird.
Comparator
wird verwendet, um zu vergleichen, zwei Datentypen Objekte sind.
Wenn Sie sehen, dann logische Unterschied zwischen diesen beiden ist Comparator
in Java vergleichen zwei Objekte zu ihm zur Verfügung gestellten, während Comparable
Schnittstelle „dieses“ Referenz mit dem Objekt vergleicht angegeben.
Comparable
in Java verwendet natürliche Ordnung des Objekts zu implementieren. In Java API String, Datum und Wrapper-Klassen implementieren Comparable
Schnittstelle.
Wenn eine Klasse Comparable
Schnittstelle in Java dann Sammlung des Objekt entweder List
oder Array
implementieren kann mit Collections.sort()
oder Array.sort()
Methode und Objekt automatisch sortiert wird anhand von dort natürlichen Ordnung durch compareTo
Methode definiert sortiert werden.
Objekte, die Comparable
in Java implementieren können als Schlüssel in einer sortierten Karte oder Elemente in einem sortierten Satz zum Beispiel TreeSet
verwendet werden, ohne dass Comparator
angeben.
Meine Anmerkung lib für die Umsetzung Vergleichbare und Vergleicher:
public class Person implements Comparable<Person> {
private String firstName;
private String lastName;
private int age;
private char gentle;
@Override
@CompaProperties({ @CompaProperty(property = "lastName"),
@CompaProperty(property = "age", order = Order.DSC) })
public int compareTo(Person person) {
return Compamatic.doComparasion(this, person);
}
}
auf den Link klicken, um weitere Beispiele zu sehen. compamatic