Priority queues von Objekten in Java
Hallo, ich bin ein bisschen verloren n die priority-queues und Komparator.
Ich nicht wirklich sehen, wie man einen Komparator in java
Also, was ich habe, ist, dass Sie mir einen Fehler und was ich gelesen habe, ist keine Hilfe für mich
http://www.tutorialspoint.com/java/java_using_comparator.htm
Dieser Beitrag Spiel mir einige Ideen, aber ich bin mir immer noch nicht, wie es zu tun
Wie benutze ich eine PriorityQueue?
Was ich habe, ist eine Klasse, die ein Objekt erstellt, mit einer Priorität, die Ankunftszeit und die Endzeit.
Ich habe auch eine Reihe von priority-queues, die Sie in. Wenn ich damit beginne, Stelle ich Sie in die Ankunft Warteschlange, um Sie zu Sortieren und dann sehen, was kam in der ersten und platzieren Sie diese in die Warteschlange ein. Aber wenn ich versuche, fügen Sie eine zweite, um die Ankunft Warteschlange es fehlschlägt und eine exception wirft.
Was soll ich zuerst tun ist, um alle Prozesse Ankunft Warteschlange und dann Sortieren Sie Sie so der eine mit der kleinsten Ankunftszeit wird die erste von der Ankunft Warteschlange und in die Warteschlange ein.
Vielen Dank für jede Hilfe mit diesem
//the comparator
Comparator<Integer> comparator = new Comparator();
//priority queues
//only needs 10 elements to hold
PriorityQueue one = new PriorityQueue(10, comparator);
PriorityQueue two = new PriorityQueue(10, comparator);
PriorityQueue three = new PriorityQueue(10, comparator);
PriorityQueue four = new PriorityQueue(10, comparator);
PriorityQueue arrival = new PriorityQueue(10, comparator);
//put all processes in arrival queue
arrival.add(p1);
arrival.add(p2);
arrival.add(p3);
arrival.add(p4);
arrival.add(p5);
arrival.add(p6);
arrival.add(p7);
arrival.add(p8);
arrival.add(p9);
arrival.add(p10);
- "... es fehlschlägt und eine exception wirft." Welche, und was ist die Fehlermeldung?
- Warum brauchen Sie mehrere priority queues? Und warum machen die Ihre Objekte haben eine "Priorität", wenn Sie wirklich wollen, um Sie zu vergleichen, indem Sie die Zeit der Ankunft? Und was meinst du mit "die Warteschlange ein" - Sie haben 4 Warteschlangen abgesehen von der Ankunft Warteschlange...?
- Ein
Comparator
ist in der Regel eine Schnittstelle, die Sie implementieren müssen. Ich kann nicht sehen, wo Sie implementiert diese Schnittstelle. - wenn Sie einen Blick auf stackoverflow.com/questions/683041/... Sie sehen, er erklärt die Komparator-int die main-Methode, dass das, was ich versuche zu tun.
- Ja, Jon definiert eine Klasse, die implementiert
Comparator
(seineStringLengthComparator
), und dann instanziiert es. Sie haben das nicht getan, die Sie versuchen zu nennennew Comparator()
direkt, dem wird das kompilieren fehlschlagen, weiljava.util.Comparator
ist eine Schnittstelle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schauen wir uns an wie man die Definition
Comparator
, weil ich im moment nicht denken, was du geschrieben hast würde auch kompilieren.Comparator
ist eine Schnittstelle, was bedeutet, dass Sie brauchen, um zu definieren ein Klasse, der Sie implementiert. Das heißt, Sie definieren eine Klasse, die konkreten Implementierungen der Methoden beschrieben von der Schnittstelle. Hier gibt ' s nur eine Methode, die Sie brauchen zu kümmern -compare
. (Die Schnittstelle definiert auchequals
, aber das ist eine seltsame Wahl, da es gleich auf derObject
und so jede Klasse implementieren, die diese standardmäßig...)Den
compare
Methode akzeptiert zwei Objekte des Ziel-Typ und entscheidet, welche von Ihnen kommt "vor" den anderen. Es gibt:So, die Sie vergleichen möchten Objekte, was die Klasse Ihres
p1
,p2
Instanzen (ich nenne esMyClass
). Das bedeutet, dass Sie haben, eine Klasse zu definieren:Wissen wir, dass die compare-Methode soll einen Wert zurückgeben, je nachdem, auf welche der
MyClass
Argumente kommt vor dem anderen. Sie haben gesagt, in Ihrer Frage, dass der, der zuerst kommt, ist die eine, die kleinste (d.h. früheste?) die Zeit der Ankunft.Dies ist eigentlich sehr einfach, denn das ist die so genannte natürlichen Bestellung auf
java.util.Date
Objekte - so können Sie einfach vergleichen Sie Ihre Anreise-Zeiten gegen einander direkt, wie das Ergebnis , dass Vergleich ist der gleiche wie der gesamtvergleich.Daher die Umsetzung der
compare
können einfach sein (vorausgesetzt, eine sinnvoll benannte accessor-Methode):Und dort gehen Sie! Sie gerade definiert haben Ihren eigenen Komparator, Sortieren
MyClass
Objekte nach Startzeit aufsteigend. Sie können es verwenden, in der Prioritäten-queues in ähnlicher Weise zu dem, was Sie bereits:int
s? Das ist vielleicht nicht die beste Wahl darstellen, eine Instanz in der Zeit (wenn nichts anderes sollten Sie schreiben eine wrapper-Klasse für Klarheit und irgendwo platzieren, Methoden), aber fair genug. In diesem Fall müssen Sie für den Vergleich von zwei int-Werten - nutzenb.getStartTime() - a.getStartTime()
für dieses (gibt eine entsprechende Antwort von compareTo).int
kann nicht aufgelöst werden" bedeutet, dass Sie können nicht zum aufrufen von Methoden auf eineint
(oder Felder - irgendetwas, das dereferenzieren indem Sie den Punkt zu finden der sich etwas befindet). Nur Objekte können aufgelöst werden, und da einint
ist eine primitive, es ist nicht ein Objekt, hat also keine Felder/Methoden und können nicht aufgelöst werden.