我有一个涉及迭代优先级队列的 java 分配。队列由带有字符串和 int 的对象组成,我需要有一种方法来检查单独对象的字符串与队列中的所有对象。
最好的方法是迭代器对象吗?这似乎太乱了。我可以出队和入队,但这似乎效率低下。也许是一个 foreach 循环?
我有一个涉及迭代优先级队列的 java 分配。队列由带有字符串和 int 的对象组成,我需要有一种方法来检查单独对象的字符串与队列中的所有对象。
最好的方法是迭代器对象吗?这似乎太乱了。我可以出队和入队,但这似乎效率低下。也许是一个 foreach 循环?
是的,如果您需要检查集合中的每一个元素,一个iterator
orfor each
可能是最好的。
Iterator<E> iter = myPriorityQueue.iterator();
while (iter.hasNext()) {
current = iter.next();
// do something with current
}
或者
for (Element e : myQueue) {
// do something with e
}
一个小细节:如果您的队列有可能在循环期间被修改,那么两者iterator
都会for each
导致ConcurrentModificationException
; 如果在处理过程中队列有可能被修改,您可以使用poll()
:
Resource resource;
while ((resource = resourceQueue.poll()) != null) {
this.processIncludes(resourceQueue, resource);
}
如果您不关心排序(在这种情况下 - 为什么要处理PriorityQueue
?),请使用 Iterator。如果您想按优先级进行迭代,请参阅Javadoc的建议:
如果您需要有序遍历,请考虑使用 Arrays.sort(pq.toArray())。