Kann ein Objekt mehrere Methoden Vergleichen für die Bestellung, basierend auf unterschiedlichen Werten?
Sagen, ich habe ein Song-Objekt wie
public Song(){
String artist, title;
StringBuilder lyrics;
int rank;
}
Ist es möglich, dass mehrere Methoden vergleichen, die, je nach Sammlung, Sortierung nach einem bestimmten Feld? Dieses Objekt hat bereits eine compare-Methode für die Bestellung über den Künstler und Titel Werten, und ich möchte in der Lage sein, um basierend auf dem Rang.
Mein Aktuelles Projekt verlangt von uns, führen Sie eine Suche auf den Text des Liedes und geben Sie einen hohen zu niedrigen match-Liste. Ich will eine PriorityQueue zu halten die Spiele basierten auf Rang Wert.
Normalerweise würde ich Sie einfach erstellen Sie ein anderes Objekt, halten Sie den Song gedrückt und der rank, aber bei diesem Projekt nicht nur Stecker in eine GUI-Schnittstelle, die die Professorin, die erfordert keine Ergebnisse weitergegeben werden, die in einem Lied[] array, sondern druckt die ersten zehn Werte als Rang, Titel, Künstler.
Kann ich verwenden toArray() zum konvertieren der Warteschlange, aber wenn ich es speichern alles andere als Song-Objekte, wird es werfen eine ArrayStoreException.
So ist dies möglich, oder muss ich ändern Sie die bestehende Methode vergleichen zum Sortieren von integer-Wert?
InformationsquelleAutor Jason | 2010-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meisten geordnete Sammlungen haben einen Konstruktor, eine
Comparator
als argument. Definieren Sie ein paar statische Komparatoren in IhremSong
Klasse und definieren Sie dann die Dinge wie folgt:Dort sind utility-Klassen (z.B., Guave Bestellen), die Ihnen helfen können, sich mit anderen Komparatoren von den Grundlagen.
InformationsquelleAutor Michael Brewer-Davis
Verwenden Komparator.
Sehen http://download.oracle.com/javase/tutorial/collections/interfaces/order.html
InformationsquelleAutor Adam
Den
compareTo
Methode derComparable
- Schnittstelle bietet normalerweise die default-Vergleich, wenn Sie wollen, einen anderen so schreiben Sie bitte eineComparator
Objekt.InformationsquelleAutor Reese Moore
Könnte man den Konstruktor verwenden
PriorityQueue(int, Komparator<? super E>)
, eine abweichende Sortierung benutzen.Gibt es einen Grund für die Verwendung einer
PriorityQueue
abgesehen von der Sortierung?PriorityQueue
ist nicht nur ineffizient, wenn Sie nicht brauchen, um es sortiert nach jedem neuen element, kann aber auch nicht verwendet werden, um eine Sortierung in verschiedene Arten. Sie müssten eine anderePriorityQueue
für jede gewünschte Sortierung.Mit einem
List
ausreichend sein könnte und es erlauben würde, Sie zu Sortieren, mit einem anderenComparator
Wann immer Sie möchten:Sammlungen.sort(List<T> list, Comparator<? super T>)
InformationsquelleAutor zockman
Statt der Durchführung Vergleichbarer Lied, übergeben Sie einen benutzerdefinierten Komparator, um Ihre Sammlung von Wahl.
Sehen Objekt Bestellen für weitere details.
InformationsquelleAutor helpermethod