Таким образом, брать приоритетную очередь в список, а затем сортировать ее - хороший вариант, как упомянуто выше. Вот некоторые подробности, почему итератор дает неожиданные результаты:
Итератор не возвращает элементы в правильном порядке, поскольку он печатает из базовой структуры данных (аналогично ArrayList). Данные ArrayList хранятся в нем таким же образом, как они хранятся в реализации Array BinaryHeap. Например:
PriorityQueue<Integer> pq = new PriorityQueue<>();
ArrayList<Integer> test = new ArrayList(Arrays.asList(6,12,7,9,2));
test.forEach(x -> pq.add(x));
System.out.println("Priority Queue:- "+pq); [2, 6, 7, 12, 9]
, где childOf (i) равно 2 * i + 1 и 2 * i + 2, а parentOf (i) равно (i-1) / 2