9

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

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

4

3 回答 3

11

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

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

或者

for (Element e : myQueue) {
        // do something with e
}
于 2012-12-07T07:29:32.303 回答
5

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

    Resource resource;
    while ((resource = resourceQueue.poll()) != null) {
        this.processIncludes(resourceQueue, resource);
    }
于 2015-06-01T18:44:27.277 回答
1

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

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

于 2012-12-07T08:05:51.440 回答