Frage

Ich habe Klassen gesehen, die Umsetzung sowohl Vergleichbare und Vergleicher . Was bedeutet das? Warum sollte ich einen über den anderen verwenden?

War es hilfreich?

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

  1. Comparable Schnittstelle implementieren, Klasse muss eine einzelne Methode compareTo() implementieren

    int a.compareTo(b)

  2. 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

  1. Der Komparator-Schnittstelle zu implementieren, Klasse muss eine einzelne Methode compare() implementieren

    int compare (a,b)

  2. 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 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top