使用collections.reverseOrder()反转自然顺序

cho*_*boy 4 java

我有一个类使用优先级队列以升序显示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...
    }
}
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 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
Run Code Online (Sandbox Code Playgroud)

因为你正在使用自然顺序String,所以建立另一个PriorityQueue传递作为参数的新比较器是有意义的,它比较字符串但是反转顺序(注意-比较前面的符号).

编辑:

正如评论中所指出的,这是一个更简单的解决方案:

PriorityQueue<String> reversed =
    new PriorityQueue<String>(sQ.size(), Collections.reverseOrder());
reversed.addAll(sQ);
Run Code Online (Sandbox Code Playgroud)