Я пытаюсь реализовать кучу с помощью PriorityQueue следующим образом:
PriorityQueue<Node> heap = new PriorityQueue<Node>();
Set<String> allWords = codebook.getAllWords();
for(String word : allWords)
{
heap.add(new Node(word, codebook.getProbability(word)));
System.out.println(heap.toString());
}
Где я определил Node как закрытый класс внутри того же класса, который содержит вышеуказанный метод. Узел определен как:
private static class Node implements Comparable
{
protected Node left;
protected Node right;
protected String name;
protected double frequency;
public Node(String n, double f)
{
name = n;
frequency = f;
}
public Node(double f, Node l, Node r)
{
frequency = f;
left = l;
right = r;
}
@Override
public int compareTo(Object arg0)
{
Node other = (Node)(arg0);
if(this.frequency < other.frequency)
{
System.out.println(name + " < " + other.name);
return -1;
}
else if(this.frequency > other.frequency)
{
System.out.println(name + " > " + other.name);
return 1;
}
System.out.println(name + " is equal to " + other.name);
return 0;
}
public String toString()
{return name;}
}
Однако, когда я добавляю узлы в PriorityQueue, они не упорядочены по частоте. Основываясь на выводе из моих операторов println, правильные значения возвращаются Node.compareTo (). Например, учитывая набор данных:
- имя, частота
- нужно, 3
- кошка, 1
- аккуратно, 2
Мой код выдает:
// добавить нужно
[Необходимость]
// добавить кота
кошка <нужно <br>
[кошка, нужно]
// добавляем аккуратно
аккуратный> кот
[кошка, нужна, аккуратная]
когда значение PriorityQueue должно быть [cat, neat, need]
Любые подсказки относительно того, почему это происходит?