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

Ano*_*non 8 java queue foreach iterator priority-queue

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

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

The*_*111 9

是的,如果您需要检查集合中的每个元素,那么iterator或者for each可能是最好的.

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

要么

for (Element e : myQueue) {
        // do something with e
}
Run Code Online (Sandbox Code Playgroud)


Har*_*_OK 5

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

    Resource resource;
    while ((resource = resourceQueue.poll()) != null) {
        this.processIncludes(resourceQueue, resource);
    }
Run Code Online (Sandbox Code Playgroud)