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
相关产品推荐
相关产品推荐

