請幫助我瞭解的東西Java的優先級隊列排序,澄清需要
我開始用
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)到相同的隊列。這些事件也開始在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);
}
我在想什麼?
你如何得到PriorityQueue的當前內容?一個接一個地彈出元素,或者試圖獲取當前隊列狀態的轉儲? – MAK 2013-03-25 18:06:23
從javadoc中,「方法迭代器()中提供的迭代器不能保證以任何特定順序遍歷優先級隊列的元素。」你每次使用一個'Iterator'? – 2013-03-25 18:06:49