为什么我的Java中的PriorityBlockingQueue无法正确排序?
由于某种原因,当我添加到优先级队列时,它不能完全按字母顺序对字符串进行排序,也无法理解原因。
这是添加到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
回答:
我怀疑您正在尝试迭代PriorityBlockingQueue
并打印元素。
请注意,优先级队列数据结构(AKA
heap)不能保证排序-
它保证头是最小的,但不能保证以下任何节点上的排序。
如果您希望数据保持排序状态-
我建议使用类似的东西ConcurrentSkipListSet
(注意,这是一个集合-
因此不允许重复的主菜),或保持已排序List
。
如果要使用PriorityBlockingQueue
- 获取排序的元素-您应该迭代删除标题并输出新的标题-直到优先级队列用尽。它将保证有序输出。
以上是 为什么我的Java中的PriorityBlockingQueue无法正确排序? 的全部内容, 来源链接: utcz.com/qa/406493.html