我有一个涉及迭代优先级队列的java赋值。队列由带有字符串和int的对象组成,我需要有一种方法来检查队列中所有对象的单独对象的字符串。
这是一个迭代器对象的最佳方法吗?这看起来太乱了。我可以出列队并入队,但这似乎效率低下。也许是一个foreach循环?
答案 0 :(得分:9)
是的,如果您需要检查集合中的每个元素,iterator
或for 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)
一个小细节:如果在循环期间您的队列有可能被修改,那么iterator
和for each
都会导致ConcurrentModificationException
;如果队列在处理过程中有可能被修改,您可以使用poll()
:
Resource resource;
while ((resource = resourceQueue.poll()) != null) {
this.processIncludes(resourceQueue, resource);
}
答案 2 :(得分:1)
如果您不关心订购(在这种情况下 - 为什么要处理PriorityQueue
?),请使用Iterator。如果您想按优先级进行迭代,请参阅Javadoc的建议:
如果您需要有序遍历,请考虑使用 Arrays.sort(pq.toArray())。