You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java PriorityQueue<String>未按预期字典序排列的原因咨询

为什么Java PriorityQueue直接打印的结果不符合字典序?

这是因为PriorityQueue的内部存储是二叉堆结构,它的toString()方法只是直接遍历底层数组的元素输出,不会按照优先级顺序排列。API文档里说的“String按字典序排列”,指的是队列的优先级规则——每次通过poll()或peek()获取的元素是当前队列中字典序最小的,而非队列的整体存储或直接打印的结果是完全有序的。

看你的代码,添加元素后堆结构会自动调整,让字典序最小的mackerel处于堆顶(也就是底层数组的第一个位置),但后面的元素是堆结构的内部排列,并非严格的字典序,所以直接System.out.println(q)会得到[mackerel, trout, salmon]。

如果要得到有序的输出,需要通过poll()方法逐个取出元素(每次取出当前优先级最高的元素):

java.util.PriorityQueue<String> q = new java.util.PriorityQueue<>();
q.offer("salmon");
q.offer("trout");
q.offer("mackerel");

// 按优先级顺序取出元素
while (!q.isEmpty()) {
    System.out.print(q.poll() + " ");
}
// 输出:mackerel salmon trout

内容的提问来源于stack exchange,提问作者user235945

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:32:05