Как правильно выполнить итерацию очереди приоритетов?
У меня есть назначение java, включающее итерацию очереди приоритетов. Очередь состоит из объектов со строкой и int в них, и мне нужно иметь способ проверить строку отдельного объекта против всех объектов в очереди.
Это было бы лучшим способом сделать это будет объект iterator? Это кажется слишком грязным. Я мог бы dequeue и enqueue, но это кажется неэффективным. Может быть, цикл foreach?
3 ответов
да, если вам нужно проверить каждый элемент в коллекции 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
}
одна маленькая деталь: если есть шанс, что ваша очередь может быть изменена во время цикла, то оба iterator
и for each
вызывает ConcurrentModificationException
; Если есть шанс, что очередь будет изменена во время обработки, вы можете использовать poll()
:
Resource resource;
while ((resource = resourceQueue.poll()) != null) {
this.processIncludes(resourceQueue, resource);
}
Если вы не заботитесь о заказе (в этом случае - почему вы имеете дело с PriorityQueue
?), используйте итератор. Если вы хотите выполнить итерацию по приоритету, см. Совет от Javadoc:
Если вам нужен упорядоченный обход, рассмотрите возможность использования Матрицы.сортировка(РQ.toArray ()).