java - 为什么 Java 中的 PriorityBlockingQueue 排序不正确?

标签 java sorting priority-queue

出于某种原因,当我添加到优先级队列时,它没有完全按字母顺序对我的字符串进行排序,我不明白为什么。

这是添加到 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 并打印元素。

请注意,优先队列数据结构(又名 heap)不保证顺序 - 它保证头部最小,但不保证以下任何节点的顺序。

如果您希望您的数据保持排序 - 我建议使用类似 ConcurrentSkipListSet 的东西(但请注意,它是一个集合 - 因此它不允许重复的主菜),或者维护一个排序的 List .

如果您想使用 PriorityBlockingQueue 获取已排序的元素 - 您应该反复删除头部并输出新的头部 - 直到优先级队列耗尽。它将保证有序输出。

关于java - 为什么 Java 中的 PriorityBlockingQueue 排序不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370431/

相关文章:

java - 在Andengine中创建物理体时出现奇怪的错误

java - 为什么 JButton 不显示在 JFrame 上?

algorithm - 在有序简单列表中插入元素的最有效算法是什么

python - 从特定的行开始,如何进行它们的值直到遇到具有更高值的行?

linux - 如何在 linux 中每第 n 行对数据进行排序?

使用 ScanF 在循环中创建新变量

c++ - 如何使用用户定义的对象从priority_queue 获取非常量顶部元素?

java - 在 Play Framework 中使用 JPA/Hibernate 创建表/查询

c++ - c++中STL的priority_queue

java - 从子类进行静态类相关的对象初始化