当前位置: 首页 > 面试题库 >

为什么我的Java中的PriorityBlockingQueue无法正确排序?

邢炯
2023-03-14
问题内容

由于某种原因,当我添加到优先级队列时,它不能完全按字母顺序对字符串进行排序,也无法理解原因。

这是添加到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- 获取排序的元素-您应该迭代删除标题并输出新的标题-直到优先级队列用尽。它将保证有序输出。



 类似资料:
  • 问题内容: 好的,我已经在网上搜索了所有内容,但还没有找到解决问题的方法,也许我缺少一些简单的东西,所以我在这里… 我有一个相当大的项目,处理维修业务的工单。它是所有与数据库连接的页面,其中包含许多页面的代码和类。但是我只是在前端添加了一小段代码,基本上检查了我们的注释区域中的新消息。 无论如何,我显示一个带有两个 JLabel 的简单 JFrame ,同时一个单独的线程查询数据库。所有这些都在程

  • 问题内容: 我已经尝试了两个类组件: 并使用功能组件: 页面上显示的x值永远不会改变,或者似乎是随机改变的。是什么赋予了? 问题答案: 当您告诉React某些更改时,React仅知道使用其为状态管理提供的功能来重新渲染: 另外,功能组件应该是 纯 组件(没有副作用),因此要更新它们,React会给我们带来麻烦: 因此,您不能只是分配给一个变量并期望React知道:您必须使用它的更新函数,以便它知道

  • 我有一个java应用程序,它在JTabbedPane上加载并显示一个applet。所以基本上GUI是: 小程序-- 我已经在JFrame类中放入了这一标准行: 下面是我在 JFrame 类中的方法,它应该在窗口关闭时调用: 然后,在我的Tabbed Pane类中,我有一个管理Applets的arrayList: 我循环遍历JPanels的ArrayList,如下所示: JPanel类中的stopG

  • 问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火

  • 这些是说明。。。编写一个计算行星测量值的类。 > 用这些方法写一个类。 初始化行星周长为英里或公里的构造函数 计算行星测量值的方法-圆,面积,直径,半径,表面,面积,体积 使用你的类编写一个程序,要求用户输入行星的周长,创建一个行星对象,用逗号和小数打印行星的测量值,确保小数对齐。 这是我的输出,示例用户输入为:100

  • 问题内容: 我在Ubuntu Hardy VPS上做了一份计划工作,只有一半可以工作,我不知道为什么。这项工作是一个Ruby脚本,它使用mysqldump备份Rails应用程序使用的MySQL数据库,然后将其压缩并使用SFTP上传到远程服务器。 gzip文件已成功创建并复制,但始终为零字节。但是,如果我直接从命令行运行cron命令,它将运行完美。 这是cron工作: 这是datadump.rb: