PriorityQueue - Dúvida [RESOLVIDO]

Galera estou estudando pra certificação e quando fui testar um código fiquei com uma dúvida

por que esse código, mostra 1 3 2 como resultado


public static void main(String[] args) {

        PriorityQueue<Integer> priorityQueue = new PriorityQueue<Integer>();
        priorityQueue.add(3);
        priorityQueue.add(1);
        priorityQueue.add(2);
        
        for(int i: priorityQueue){
            System.out.println(i);
        }

    }

e esse mostra 1 2 3


public static void main(String[] args) {

        PriorityQueue<Integer> priorityQueue = new PriorityQueue<Integer>();
        priorityQueue.add(3);
        priorityQueue.add(1);
        priorityQueue.add(2);
        
        System.out.print(priorityQueue.poll()+" "+priorityQueue.poll()+" ");
        System.out.println(priorityQueue.peek());
    }

Desde já sou grato

Quando você percorre uma PriorityQueue usando foreach, ele simplesmente usa um iterador que percorre a lista como ela está organizada em memória. E essa lista não necessariamente está em ordem de prioridade.

Quando você usa poll ou peek, você obtém os elementos na ordem esperada.

Pense em uma repartição pública, onde você pega uma senha e vai se sentar em uma daquelas salinhas com um monte de cadeiras e uma televisão, que serve para você não passar raiva enquanto você vai esperar ser chamado. Você pode se sentar em qualquer lugar, já que a ordem de atendimento é dada pela senha, não por seu lugar dentro daquela salinha.

O “poll” serve para chamar a próxima pessoa, por ordem de senha, e o “foreach” pega as pessoas como elas estão sentadas na sala.

Caraca entanglement ótima explicação.

Muito Obrigado.