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 回答