2012-04-09 18 views
4

私は、優先順位キューを使用して5つの文字列を昇順で表示するクラスを持っています。降順にするには、 "collections.reverseOrder()"メソッドを使用することができます。どのようにこのメソッドを次のコードで使用しますか?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... 
    } 
} 

答えて

11

この、前sQの要素を取り除くような何か試してみてください:あなたはStringの自然順序付けを使用しているので、それだけでパラメータ新規として別のPriorityQueue通過を構築することは理にかなって

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 

を文字列を比較するが、順序を逆転させる比較器(比較の前に-記号があることに注意)。

EDIT:

コメントで指摘したように、これはさらに簡単なソリューションです:

PriorityQueue<String> reversed = 
    new PriorityQueue<String>(sQ.size(), Collections.reverseOrder()); 
reversed.addAll(sQ); 
+0

「o1とo2」が何であるか教えてください。 – choloboy

+0

@Oscarそれより簡単にすることもできます。 'PriorityQueue reverseed = new PriorityQueue (sQ.size()、Collections.reverseOrder()); ' –

+0

コレクション内の各要素のペア。キューがその要素をソートすると、各要素のペアに対してコンパレータが呼び出され、どちらが先に進むべきかが決定されます。 –

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+" ,"); 

をしかし、問題があります並べ替えあなたのリストを逆順に

関連する問題