2016-05-30 15 views
0

Ich lese gerade das Java How to program Buch von Deitel und einige der Formulierungen scheinen verwirrend zu sein. Ich frage mich, ob jemand das erklären kann, da es irreführend zu sein scheint. Wenn Elemente zu einer PriorityQueue hinzugefügt werden, werden die Elemente in der Prioritätsreihenfolge eingefügt, so dass das Element mit der höchsten Priorität (d. H. Der größte Wert) das erste Element ist, das aus der PriorityQueue entfernt wird.Verwirrt über Deitels Formulierung in Bezug auf das Element höchster Priorität in einer Prioritätswarteschlange

Der Teil, der mich verwirrt, ist, wo es besagt, dass das Element mit der höchsten Priorität (größter Wert) entfernt wird. Wenn ich in einer PriorityQueue 9.8, 5.4 und 3.2 hinzufügen würde, würde ich erwarten, dass die PriorityQueue in dieser Reihenfolge gelöscht/abgefragt wird, unabhängig davon, in welcher Reihenfolge ich sie eingefügt habe, als ich sie eingefügt habe.

Während meines Codebeispiels bemerkte ich jedoch das Gegenteil. Die Reihenfolge, in der die Elemente entfernt wurden, war zuerst die kleinste Menge. Beim Lesen der Javadocs sehe ich, wo es heißt "Der Kopf dieser Warteschlange ist das kleinste Element in Bezug auf die angegebene Reihenfolge", was mit dem übereinstimmt, was ich beim Arbeiten mit dem Codebeispiel gefunden habe.

Bedeutet dies, dass das Buch falsch ist, oder fasse ich gerade nicht die Formulierung, die das Buch verwendet, um dieses Konzept zu beschreiben?

+0

Er ist falsch und die Javadoc ist richtig. Sie können jedoch einen 'Comparator' definieren, der die Reihenfolge umkehrt. – EJP

Antwort

0

"Größter Wert" ist eine unvorsichtige Formulierung.

Prioritätswarteschlangen können Elemente gemäß potenziell beliebigem Ordnungsschema (da sie benutzerdefinierte Vergleicher akzeptieren) zurückgeben, aber sie geben Elemente standardmäßig gemäß ihrer "natürlichen Reihenfolge" zurück. In Java kommen niedrigere Zahlen "vor" größeren Zahlen.

Sie einen Blick auf natürliche Ordnungen für einige wichtige Klassen nehmen können (einschließlich der Wrapper für jede der Primitiven) in der Oracle-Dokumentation: https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html