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));
}
これがノードの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;
}
PriorityQueue
は、反復するときに特定の順序で要素を返すことを期待していると思います。ただし、PriorityQueue
は、ソートされたリストではなく優先ヒープとして実装されているため、このような動作は提供しません。から javadoc :
メソッドiterator()で提供されるイテレータは、特定の順序で優先度付きキューの要素をトラバースすることが保証されていません。順序付きトラバーサルが必要な場合は、Arrays.sort(pq.toArray())の使用を検討してください。
PriorityQueue
によって提供される唯一の保証は、poll()
、peek()
などが最小の要素を返すことです。要素の順序付けられた反復が必要な場合は、TreeSet
などの他のコレクションを使用してください。