gpt4 book ai didi

java - 关于Java优先级队列的排序,需要澄清

转载 作者:行者123 更新时间:2023-11-30 04:27:01 25 4
gpt4 key购买 nike

请帮我理解一些事情

我从一个开始

private Queue<SomeEvent> future = 
new PriorityQueue(CAPACITY, new SomeEventComparatorByTime());

然后,我将 5 个事件(来自第 1 组)添加到队列中,其中每个事件于 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_1_uid3'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid4'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }
ScheduledEvent{ userId='group_1_uid5'} { startTime=3/31/2013 10:49:00, repeat=RUN_ONCE }

然后,我通过一些简单的逻辑将事件分解为 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 组)添加到同一队列中。这些 Activity 也于 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);
}

请问我缺少什么?

最佳答案

来自Javadoc

“方法 iterator() 中提供的迭代器保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用 Arrays.sort(pq.toArray ())。”

您还可以逐一轮询元素以获得正确的顺序。

关于java - 关于Java优先级队列的排序,需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15621640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com