【发布时间】:2014-03-04 05:40:08
【问题描述】:
我正在尝试在 Java 中实现一个稳定的(先进先出)优先级队列。假设键是名称,值是年龄,我知道我可以像这样制作一个不稳定的优先级队列:
Queue<Map.Entry<String, Integer>> pq = new PriorityQueue<Map.Entry<String, Integer>>(100, ageComparator);
这几乎完成了我需要它做的所有事情,除了它在我插入(或删除它们)时不保持键值对的顺序。
我通过制作 LinkedList 找到了一种“解决方法”,它提供了基本上所有相同的功能,只是它不包含带有比较器选项的构造函数,而且我觉得它必须更慢,因为我在每次队列操作后调用Collections.sort() 来维护值顺序。
所以我想确实有两个我感兴趣的选项。首先,我如何编辑上面的 PriorityQueue 以保持插入和删除顺序?或者第二,如何强制我的 LinkedList 选项立即使用比较器,而不必对每个操作调用排序?谢谢!
编辑:
感谢您在发布的第一条评论中提出的好问题。先进先出,我的意思是对于值相等的键值对,首先放入的键值对应该先提取。
【问题讨论】:
-
您到底在调用 FIFO 优先级队列什么?你的意思是它对于同等优先级的项目是 FIFO 吗?
-
@JimGarrison - 好问题;是的,这就是我的意思。因此,如果我插入 ("Alice", 30) 然后 ("Bob", 30),那么提取应该给我 Alice 然后是 Bob。
标签: java linked-list queue priority-queue comparator