内部コンパレータのクラスに優先度つきキュー

オスカー:

私は降順で内部コンパレータのクラスに優先キューを実装しようとしたが、私は正しい結果を得ていないのですプライオリティキューを印刷したとき。私は(同じ値で)リストのソートを実装するCollection.sortに対して同じコンパレータコードをしようとしたとき。私は、正しい結果を取得しています。あなたは説明していただけますか?

//int[] nums = {50,10, 20, 30, 40};
    public static void TestComparatorcomparemethod(int[] nums){
        PriorityQueue<Integer> pq= new PriorityQueue<>(nums.length,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1,Integer o2){
                int a = (int)o1;
                int b = (int)o2;
                if (a > b)
                    return -1;
                else if (a==b)
                    return 0;
                else
                    return 1;
            }
        });
        for (int node:nums){
            pq.add(node);}
        System.out.println("pq values are " + pq);
}

上記のコードのための答えはPQの値はである[50、40、20、10、30]

        List<Integer> al = new ArrayList<>();
        al.add(50);
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
        Collections.sort(al, new Comparator<Integer>(){
            @Override
            public int compare(Integer o1,Integer o2){
                int a = (int)o1;
                int b = (int)o2;
                if (a > b)
                    return -1;
                else if (a==b)
                    return 0;
                else
                    return 1;
            }
        } );
        System.out.println("The arraylist values are: " + al);

上記のコードのための答えは、配列値はである[50、40、30、20、10]

コーダ:

あなたがプライオリティキュー要素を印刷するとき:

System.out.println("The arraylist values are: " + al);

プリントされる要素の順序を並べ替えることが保証されていません。プライオリティキューは、効率的な最小要素検索および挿入するためのヒープデータ構造のいくつかの種類を使用して実装されているので、この5月が起こります。あなたは上記のコードで要素を印刷するときだから、ソートされていないヒープ内の要素を印刷します。

これはあなたのプライオリティキューが動作していないことを意味するものではありません。

正しい方法、最も効率的な優先度キューの要素を横断するには、例えば、ポール()関数です。

pq_elem = pq.poll()
while(pq_elem != Null){
  System.out.println(pq_elem)
  pq_elem.poll()
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=19813&siteId=1