2012-12-07 20 views
8

Ho un incarico java che coinvolge iterando una coda di priorità. La coda è composta da oggetti con una stringa e un int in essi e ho bisogno di avere un modo per controllare una stringa di un oggetto separato contro tutti gli oggetti nella coda.Come si dovrebbe iterare correttamente una coda di priorità?

Sarebbe il modo migliore per farlo essere un oggetto iteratore? Sembra troppo disordinato. Potrei sganciare e accodare ma sembra inefficiente. Forse un ciclo foreach?

risposta

9

Sì, se è necessario verificare ogni singolo elemento nella raccolta, è preferibile uno iterator o for each.

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

O

for (Element e : myQueue) { 
     // do something with e 
} 
1

Se non si cura di ordinare (in quel caso - perché stai trattando con PriorityQueue), utilizzare Iterator. Se si desidera iterare per priorità, poi vedere il consiglio da Javadoc:

Se avete bisogno di attraversamento ordinato, considerare l'utilizzo di Arrays.sort (pq.toArray()).

+1

Esattamente, si basa su un mucchio che non vieta completo ordine in se stesso. Quindi dovresti chiamare il polling, perché questo farà sì che l'heap setaccia il minimo/massimo fino alla radice. Ma per le sue esigenze, l'ordine non ha importanza, quindi potrebbe eseguire l'iterazione di a per ogni ciclo. –

+0

Ho detto che devo usare una coda di priorità. Non importa però quale ordine lo attraversi. Devo solo controllare ogni stringa di oggetti per assicurarmi che non corrisponda alla stringa dell'oggetto separato – Anon

2

Un piccolo dettaglio: se c'è qualche possibilità la coda potrebbe essere modificato durante il ciclo, allora sia iterator e for each causerà un ConcurrentModificationException; se c'è una possibilità coda otterrà modificato durante la lavorazione, è possibile utilizzare poll():

Resource resource; 
    while ((resource = resourceQueue.poll()) != null) { 
     this.processIncludes(resourceQueue, resource); 
    } 
Problemi correlati