我该如何正确迭代优先级队列?

时间:2012-12-07 07:20:26

标签: java foreach iterator queue priority-queue

我有一个涉及迭代优先级队列的java赋值。队列由带有字符串和int的对象组成,我需要有一种方法来检查队列中所有对象的单独对象的字符串。

这是一个迭代器对象的最佳方法吗?这看起来太乱了。我可以出列队并入队,但这似乎效率低下。也许是一个foreach循环?

3 个答案:

答案 0 :(得分:9)

是的,如果您需要检查集合中的每个元素,iteratorfor each可能是最佳的。

Iterator<E> iter = myPriorityQueue.iterator();
while (iter.hasNext()) {
    current = iter.next();
    // do something with current
}

或者

for (Element e : myQueue) {
        // do something with e
}

答案 1 :(得分:2)

一个小细节:如果在循环期间您的队列有可能被修改,那么iteratorfor each都会导致ConcurrentModificationException;如果队列在处理过程中有可能被修改,您可以使用poll()

    Resource resource;
    while ((resource = resourceQueue.poll()) != null) {
        this.processIncludes(resourceQueue, resource);
    }

答案 2 :(得分:1)

如果您不关心订购(在这种情况下 - 为什么要处理PriorityQueue?),请使用Iterator。如果您想按优先级进行迭代,请参阅Javadoc的建议:

  

如果您需要有序遍历,请考虑使用   Arrays.sort(pq.toArray())。