Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';s优先级队列,需要澄清_Java_Priority Queue - Fatal编程技术网

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,“方法迭代器()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。”您是否每次都使用
迭代器
?非常感谢。事实上,我忽略了这一点。