Ich kann die Reihenfolge von PriorityQueue
in Java nicht verstehen. Wie ich verstehe, sind sie heap-basiert und sie können keine exakte Iterationsreihenfolge als Einfügereihenfolge liefern. Ich möchte dann wissen auf welcher Basis priorityQueue sich selbst sortieren. Gegeben Code:Reihenfolge der PrioritätQueue in Java?
PriorityQueue<String> pq = new PriorityQueue<String>();
pq.offer("hepqo");
pq.offer("bro");
pq.offer("wassup");
pq.offer("okay");
pq.offer("bingo");
pq.offer("first");
pq.offer("last");
pq.offer("ssup");
System.out.println("polled "+pq.poll());
System.out.println(pq);
String str[] = pq.toArray(new String[0]);
Arrays.sort(str);
for(String str1:str){
System.out.println(str1);
}
erzeugt eine Ausgabe:
polledbingo
[bro, hepqo, first, okay, ssup, wassup, last]
bro
first
hepqo
last
okay
ssup
wassup
Selbst wenn ich es zu Array umwandeln, die Ordnung verloren.
Ich kann nicht glauben, dass dies sogar NATURAL ORDERING von String ist.
Gibt es eine Möglichkeit, die Reihenfolge der Prioritätswarteschlangen beizubehalten?
Auf welcher Grundlage haben sie sortiert?
Das ist in der Tat natürliche Reihenfolge für Strings. –
wie kommt ??? Es ist nicht durch Komparator, richtig? –
Es ist durch die 'String # compareTo (String)' Methode. Beachten Sie, dass 'Queue # poll()' ein Element aus der Queue entfernt, weshalb '' bingo ''in der sortierten Array-Ausgabe überhaupt nicht erscheint. –