Wie die Verwendung der Komparator-Schnittstelle
Ich bin neu in java, und ich bin nicht wirklich immer, wie die Verwendung der Komparator-Schnittstelle.
Ich habe eine ArrayList
von Item
s in einem Inventory
Klasse und ein Item
Klasse.
In der Item
Klasse schrieb ich:
public class Item implements Comparator<Item> {
//stuff
...
@Override
public int compare(Item a, Item b) {
if (a.getID().compareToIgnoreCase(b.getID())>0)
return 1;
else if (a.getID().compareToIgnoreCase(b.getID())<0)
return -1;
else
return 0;
}
}
Die getID () - Methode gibt nur die id, die ich verwenden, um die Elemente alphabetisch.
Ich bin mir nicht sicher, ob das richtig ist, es machte mir den @Override
Anmerkung, ich bin nicht sicher, warum. Auch ich schrieb eine Schnittstelle, die einfach sagt:
public interface Comparator<Item>
{
int compare(Item a, Item b);
}
Ich bin nicht sicher, dass bit. Auch wie implementiere ich diese Methode zum Sortieren der arraylist erstellt, in der inventory-Klasse?
Dank, wenn meine Frage nicht sinnvoll oder Klärung benötigt, lasst es mich einfach wissen.
Item
Klasse implementiert Comparator
, die sich auf die definition erfordert eine generische Item
zu arbeiten. Es scheint, dass Sie nicht brauchen, eine generische Schnittstelle hier...Was meinst du mit " generische Schnittstelle?
Ich weiß nicht, wie zu erklären... google.com/search?btnG=1&pws=0&q=generics+in+java
dude überprüfen Sie meine aktualisierte Antwort. Ich denke, das ist, was Sie wollen.
InformationsquelleAutor bassandguitar | 2013-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Komparator Schnittstelle implementieren Sie es und übergeben Sie es als eine anonyme Klasse zu Sammlungen.sort(List Liste, Comparator c) als zweiten parameter.
Wenn Sie möchten, übergeben Sie nur die Liste zu Sammlungen.sort(List Liste) dann Ihre
Item
Klasse hat, um die Umsetzung Vergleichbar - Schnittstelle.So, in beiden Fällen werden die
Collections.sort
Methoden kennen, wie Sie, um die Elemente in Ihrer Listeist hier einige Beispiel-code:
Punkt-Klasse Implementierung
Comparable
+ Inventar hält eine Liste von ElementenAusgabe
InformationsquelleAutor A4L
EDIT: Zunächst ein paar Dinge:
@Override
Anmerkung sollte nicht obligatorisch sein. Wenn Eclipse will Sie es anziehen, keine Sorge.import java.util.Comparator;
am ganz oben in Ihrem code sein (vor denpublic class
Sachen) a) verwenden Sie die Darstellung von Java-und b) Ihr code kompatibel mit so ziemlich alles, was in der Welt existiert.Den Komparator-Schnittstelle wird nicht verwendet, um eine Klasse erstellen, können Sie setzen sich selbst in Ordnung. Dies ist die Vergleichbare Schnittstelle.
Beide sind ähnlich, also beschreibe ich hier.
java.util.Komparator
Den Komparator-Schnittstelle, wie Sie bereits wissen, hat eine Methode:
compare
. Comparator ist generisch (unter Verwendung der Spitzen Klammern<>
) und nimmt den Typ vergleichen innerhalb der<>
. Die Sache ist, dass die Komparatoren vergleichen Elemente von anderen Klassen. Ich könnte zum Beispiel erstellen Sie einen Komparator fürjava.lang.Integers
zurückgibt, die das Gegenteil von der "natürlichen Ordnung" (wie Ganzzahlen sind in der Regel bestellt).Komparatoren werden hauptsächlich verwendet, um andere Objekte ein Weg, um zu Sortieren, Ihre Parameter, wenn Sie nicht in der natürlichen Reihenfolge. Zum Beispiel, die
java.util.TreeSet
Klasse braucht einen Komparator für seine Sortier-Funktion.java.lang.Vergleichbar
Vergleichbaren Zweck ist zu sagen, dass ein Objekt verglichen werden können. Es ist auch generisch und dauert in der Art, dass es verglichen werden kann. Zum Beispiel, ein
Comparable<String>
verglichen werden können, um Zeichenfolgen.Vergleichbar hat eine Methode:
compareTo()
. Im Gegensatz Komparator istcompare()
,compareTo
nimmt einen parameter. Es funktioniert wiecompare
, außer er verwendet das aufrufende Objekt als einen parameter. AlsocomparableA.compareTo(comparableB)
ist das gleiche wiecomparator.compare(comparableA, comparableB)
.Vergleichbar meist stellt die Natürliche Reihenfolge für Objekte, und ist die Standard-Methode zum vergleichen von Objekten. Komparator hat die Aufgabe, dies zu ändern, Natürliche Ordnung, wenn man unterschiedliche Bedürfnisse hat für Daten-Vergleich oder Sortieren.
ArrayList Sortieren
Sortieren eines
List
werden, könnte die Methode bereits zur Verfügung: Blättern Sie nach unten, umsort
auf diejava.util.Kollektionen
Klasse. Eine Methode nimmt einen Komparator, der andere nicht.sort
ist statisch; verwendenCollections.sort(...)
, nichtCollections c = new Collections(); c.sort(...)
. (Collections
gar nicht über einen Konstruktor verfügen, jedenfalls, so meh.)InformationsquelleAutor ameed
Mischen Sie die Schnittstellen
Comparator
undComparable
.Komparator: http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html
Vergleichbar: http://docs.oracle.com/javase/6/docs/api/java/lang/Comparable.html
Zweck der Komparator ist eine Klasse (deklariert anonym an Ort und Stelle oder anderweitig), die übergeben werden kann, um eine operation, muss eine Bestellung, und es definiert die Art, die verwendet werden auf dem item ist. Komparator verwendet werden, AUßERHALB der Klasse, muss Sortieren, wenn es eine alternative gibt, wie Sie wollen zu Sortieren.
Zweck der Vergleichbar ist zu sagen, dass die Klasse (implementiert Vergleichbar) hat eine Natürliche Einrichtung - und das ist, was es ist. Wenn Ihre Klasse, die braucht die Sortierung hat einen natürlichen Bestellung, dann definieren Sie diese als Vergleichbar. (Eine Klasse, die Vergleichbare Reihenfolge sortiert noch kann überschrieben werden mit einem Komparator. Auf der anderen Seite, wenn die Klasse nicht Vergleichbar, als auch die übergabe eines PCs ist zwingend für die Bestellung möglich sein.)
Sie sind falsch -
Item
umsetzen würdenComparable
ODERInventory
akzeptieren würde eineComparator
was würde es verwenden für die Sortierung seinerItem
s.wie würde ich die compareTo () - Methode sortiert das array in der inventory-Klasse?
Operationen, die es erlauben, Sortieren, überprüfen, um zu sehen, wenn die Klasse der Objekte, die Sie Sortieren implementiert Vergleichbar. Wenn es das tut, nutzt die Klasse die compareTo () - definition.
InformationsquelleAutor Patashu
Haben Sie implementiert die falsche Schnittstelle, die Sie wollen Vergleichbar
Comparable
verwendet wird.InformationsquelleAutor Hiro2k
Verwendung von @Override annotation ist eine gängige Praxis in Editoren wie eclipse, netbeans zu Benachrichtigen Entwickler, dass er das überschreiben/implementieren von übergeordneten Klassen - /interface-Methode. Es ist optional.
Nicht implementieren diese Schnittstelle in Ihrem Element. Klasse. Erstellen Sie eine neue Klasse und implementieren die
Comparator
- Schnittstelle.Und dann in deiner main-Klasse:
Oh, danke für den Hinweis. Dumm mich. Etwas vermengt.
Ich glaube, ich verstehe die Zuordnung sagt zu die compareTo () - Methode, obwohl ich sah nur, wie würde ich diese stattdessen zu verwenden? und so ItemCompare muss seine eigene Klasse?
Wenn die Zuordnung sagt zu benutzen compareTo(), compareTo() ist die Methode Vergleichbarer, nicht Komparator. So implementieren Sie Vergleichbar für Element-und gehen von dort aus.
Ich sehe, was du sagst. Ich wurde lediglich darauf hingewiesen, dass Sie wurden mit der
Comparable
SchnittstelleComparator
verwendet wird. Ich habe Ihren Beitrag bearbeitet um es zu beheben, aber es wurde nicht überprüft noch. EDIT: Es hat.InformationsquelleAutor Ravi Trivedi