1

何らかの理由で、優先キューに追加すると、文字列が完全にアルファベット順に並べ替えられず、その理由がわかりません。

これは、PriorityBlockingQueue に追加するコードです。

String toAdd = String.format("%s/%s", directory, s);
outputData.add(toAdd);

しかし、完全にソートされた出力は得られません (最初の数行のみですが、ソートされていないことがわかります)。

../StartingTree/files/abknl/apfmpohgyh/a.class
../StartingTree/files/abknl/apfmpohgyh/a.java
../StartingTree/files/abknl/aqybc/aeph.java
../StartingTree/files/abknl/apfmpohgyh/bnjuxxdi.class
../StartingTree/files/abknl/bbxudleuf/jlffhq/y/xwjj/dyetqhsch/bpg.class
../StartingTree/files/abknl/bbxudleuf/mxb/fe/ndmg/axapxuco.html
../StartingTree/files/abknl/aqybc/atyuojdu.txt

そして、これは期待される出力ファイルからのソートされた出力の実際の (最初の部分) です。

../StartingTree/files/abknl/apfmpohgyh/a.class
../StartingTree/files/abknl/apfmpohgyh/a.java
../StartingTree/files/abknl/apfmpohgyh/bnjuxxdi.class
../StartingTree/files/abknl/apfmpohgyh/bnjuxxdi.java
../StartingTree/files/abknl/apfmpohgyh/bsqsq.class
../StartingTree/files/abknl/apfmpohgyh/bsqsq.java
../StartingTree/files/abknl/apfmpohgyh/ds.class
../StartingTree/files/abknl/apfmpohgyh/ds.java
4

1 に答える 1

6

PriorityBlockingQueue要素を反復して印刷しようとしていると思われます。

プライオリティ キュー データ構造 (AKAヒープ) は順序を保証しないことに注意してください。ヘッドが最小であることは保証されますが、次のノードの順序は保証されません。

データをソートしたままにしたい場合は、次のようなものを使用することをお勧めしますConcurrentSkipListSet(ただし、セットであるため、メインディッシュの重複は許可されません)、または sorted を維持しListます。

a を使用して並べ替えられた要素を取得する場合はPriorityBlockingQueue、優先キューが使い果たされるまで、ヘッドを繰り返し削除して新しいヘッドを出力する必要があります。順序付けられた出力が保証されます。

于 2012-11-13T23:08:18.847 に答える