为何poll方法未弹出队列首元素,反而弹出末尾加入的{1,2,3,4,5}?
问题解答:为何poll方法未弹出队列的首元素?
你遇到的问题根源是误用了优先队列(PriorityQueue)的特性:
- 普通队列(如
LinkedList)遵循**先进先出(FIFO)**规则,poll()方法会严格弹出最先加入队列的元素; - 但你代码中使用的
PriorityQueue是优先级队列,它的核心逻辑是按元素优先级排序,poll()方法会直接弹出当前队列中优先级最高的元素,完全不遵循加入顺序。
结合你的场景分析:
你先加入全零数组,最后加入{1,2,3,4,5}。PriorityQueue默认会按照元素的自然排序规则处理——对于数组类型,会按字典序比较大小,{1,2,3,4,5}的优先级高于全零数组(如果自定义了倒序比较器,优先级逻辑会反过来,但核心都是按优先级而非加入顺序弹出),因此调用poll()时会弹出{1,2,3,4,5}而非最先加入的全零数组。
如果需要实现先进先出的队列逻辑,替换为LinkedList(实现了Queue接口)即可。
内容的提问来源于stack exchange,提问作者yangxz18
相关产品推荐
相关产品推荐

