Java';s优先级队列,需要澄清
请帮我理解一下 我从一本书开始Java';s优先级队列,需要澄清,java,priority-queue,Java,Priority Queue,请帮我理解一下 我从一本书开始 private Queue<SomeEvent> future = new PriorityQueue(CAPACITY, new SomeEventComparatorByTime()); 然后我通过一些简单的逻辑将事件分解为2,递增时间如下。此打印输出显示队列的当前内容 ScheduledEvent{ userId='group_1_uid1'} { startTime=3/31/2013 10:49:00, repeat=
private Queue<SomeEvent> future =
new PriorityQueue(CAPACITY, new SomeEventComparatorByTime());
然后我通过一些简单的逻辑将事件分解为2,递增时间如下。此打印输出显示队列的当前内容
ScheduledEvent{ userId='group_1_uid1'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid2'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid3'} { startTime=3/31/2013 10:50:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid4'} { startTime=3/31/2013 10:50:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid5'} { startTime=3/31/2013 10:51:00, repeat=RUN_ONCE }
最后,我得到了按时间排序的SomeEvent
列表。这种精确的分配是意料之中的
然后,我将另外3个事件(来自组2)添加到同一队列中。这些活动也在10:49:00开始
将事件添加到队列后,我得到:
ScheduledEvent{ userId='group_1_uid1'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid2'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_2_uid4'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_2_uid6'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid5'} { startTime=3/31/2013 10:51:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid3'} { startTime=3/31/2013 10:50:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_2_uid5'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid4'} { startTime=3/31/2013 10:50:00, repeat=RUN_ONCE }
请注意,顺序是。。。这里没有分类。为什么?我认为当新元素添加到队列中时,它的位置由比较器决定
for (SomeEvent e : group.getEvents()) {
future.offer(e);
}
请问我遗漏了什么?来自
“在方法迭代器()中提供的迭代器不能保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用数组。排序(pq.toAlayle())。
您还可以
逐个轮询元素以获得正确的顺序。也许您需要在某个EventComparatorBytime中检查逻辑
或者重写类SomeEvent中的compareTo方法并实现Comparable
在这种情况下,您不需要使用比较器
for (SomeEvent e : group.getEvents()) {
future.offer(e);
}
我只想说
private Queue future=new PriorityQueue() 如何获取PriorityQueue的当前内容?逐个弹出元素或只是尝试获取队列当前状态的转储?来自javadoc,“方法迭代器()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。”您是否每次都使用迭代器
?非常感谢。事实上,我忽略了这一点。