Как правильно выполнить итерацию очереди приоритетов?

У меня есть назначение 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 ()).