我有一个使用优先级队列按升序显示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...
}
}
答案 0 :(得分: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
作为参数传递一个新的比较器来比较字符串但是颠倒顺序是有意义的(注意{{1}在比较前面签名。)
修改强>
正如评论中所指出的,这是一个更简单的解决方案:
-
答案 1 :(得分:3)
首先,您要从队列中删除元素:不要忘记将它们添加回来。 如果你结账:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#reverseOrder()你会注意到如何使用它:)
祝你好运!
答案 2 :(得分: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+" ,");
但问题是它还会以相反的顺序排序您的列表