为什么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 堆 )不保证排序 – 它保证头部最小,但在以下任何节点上都没有命令保证。

如果你希望你的数据保持排序 – 我建议使用类似ConcurrentSkipListSet (注意它是一个集合 – 因此它不允许重复主题),或维护一个排序List

如果要使用PriorityBlockingQueue获取已排序的元素 – 您应该迭代地删除头并输出新的头 – 直到优先级队列耗尽。 它将保证有序的输出。