编程语言
首页 > 编程语言> > 为什么我的Java中的PriorityBlockingQueue无法正确排序?

为什么我的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,sorting,priority-queue
来源: https://codeday.me/bug/20191013/1907563.html