4

優先キューを使用して5つの文字列を昇順で表示するクラスがあります。降順で作成するには、「collections.reverseOrder()」メソッドを使用できることを理解しています。次のコードでこのメソッドをどのように使用しますか?

import java.util.*;
public class queue {

    public static void main (String[] args) {

        PriorityQueue<String> sQ = new PriorityQueue<String>();

        sQ.add("theodore");
        sQ.add("theo");
        sQ.add("Shailee");
        sQ.add("Deborah");
        sQ.add("Fernando");
        sQ.add("th");

        while (sQ.size() > 0)
            System.out.println(sQ.remove());

        Collections.reverseOrder(); //I am stuck here...
    }
}
4

3 に答える 3

11

の要素を削除する前に、次のようなことを試してくださいsQ

PriorityQueue<String> reversed =
    new PriorityQueue<String>(sQ.size(), new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return -o1.compareTo(o2);
    }
});
reversed.addAll(sQ); // now `reversed` contains the reversed priority queue

の自然順序付けを使用しているため、文字列を比較するが順序を逆にする新しいコンパレータをパラメータとしてString別のパスを作成することは理にかなっています(比較の前の符号に注意してください)。PriorityQueue-

編集:

コメントで指摘されているように、これはさらに簡単な解決策です。

PriorityQueue<String> reversed =
    new PriorityQueue<String>(sQ.size(), Collections.reverseOrder());
reversed.addAll(sQ);
于 2012-04-09T19:36:31.737 に答える
3

まず、キューから要素を削除します。要素を追加し直すことを忘れないでください。http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#reverseOrder ()をチェックアウトすると、その使用方法に気付くでしょう:)

頑張ってください!

于 2012-04-09T19:32:43.577 に答える
1

これを試すこともできます:

    String[] strArray = new String[0];

    /*Creating array from Queue*/
    strArray = sQ.toArray(strArray);

    Arrays.sort(strArray,Collections.reverseOrder());   

    System.out.println("\n Elements of Queue in REVERSE:\n");

    for(String s:strArray)
    System.out.print(s+" ,");

ただし、問題は、リストが逆の順序で並べ替えられることです。

于 2012-12-10T15:26:01.500 に答える