Dlaczego to dziwne zamówienie dzieje się w PriorityQueue w java? [duplikować]

To pytanie ma już tutaj odpowiedź:

Wbudowany iterator dla PriorityQueue java nie przesuwa struktury danych w jakiejś określonej kolejności. Czemu? 5 odpowiedzi

Przeczytałem dokumentację i wszystko, co mogłem znaleźć na temat PriorityQueue, ale wciąż nie rozumiem, dlaczego dane wyjściowe są tak dziwne. Mam na myśli, że nie mogę znaleźć punktu dodania kolejności, czy ktoś może to wyjaśnić?

PriorityQueue<String> pq = new PriorityQueue<String>();
pq.offer("2"); 
System.out.println("add 2 : " + pq); 
pq.offer("4");
System.out.println("add 4 : " + pq);
System.out.println(pq.peek() + " ");
pq.offer("1");
System.out.println("offer 1 : " + pq);
pq.offer("3");
System.out.println("add 3 : " + pq);
pq.remove("1");
System.out.println("remove 1 : " + pq);

Wydajność:

add 2 : [2]
add 4 : [2, 4]            <- why 4 goes there
offer 1 : [1, 4, 2]       <- why 1 goes first
add 3 : [1, 3, 2, 4]      <- why reorder
remove 1 : [2, 3, 4]      <- again

questionAnswers(3)

yourAnswerToTheQuestion