PriorityQueue не сортировка по добавлению

У меня есть очередь приоритетов, в которую я добавляю объект Node, где узлы должны сортироваться по содержащемуся в них значению. По какой-то причине очередь приоритетов не будет сортировать узлы при добавлении. Если кто-то видит что-то не так с этим или имеет какое-либо руководство, я ценю его. Вот краткий пример:

PriorityQueue<Node> PQ = new PriorityQueue<Node>();
        //for each entry create a node and add it to the PriorityQueue
        for(Entry<Character,Integer> entry : entries){
            PQ.add(new Node(entry.getKey(),entry.getValue(), true));
        }

Вот метод Node compareTo:

@Override
public int compareTo(Node n) {
  if(n.frequency.intValue() > this.frequency.intValue()) return  -1;
  else if(n.frequency.intValue() == this.frequency.intValue()) return 0;
  else return 1;
}

Ответы

Ответ 1

Думаю, вы ожидаете, что PriorityQueue вернет элементы в определенном порядке, когда вы его итерации. Тем не менее, PriorityQueue не обеспечивает такого поведения, поскольку оно реализовано как куча приоритета, а не отсортированный список. Из javadoc:

Итератор, предоставляемый в методе итератора(), не гарантирует пересечения элементов очереди приоритетов в любом конкретном порядке. Если вам нужно упорядоченное обход, подумайте об использовании массива Arrays.sort(pq.toArray()).

Единственная гарантия, предоставляемая PriorityQueue, заключается в том, что poll(), peek() и т.д. возвращают наименьший элемент. Если вам нужна упорядоченная итерация элементов, используйте другую коллекцию, например TreeSet.