2012-12-07 11 views
8

Mam zadanie java obejmujące iterację kolejki priorytetowej. Kolejka składa się z obiektów z ciągiem i int w nich i muszę mieć sposób na sprawdzenie łańcucha oddzielnego obiektu przed wszystkimi obiektami w kolejce.Jak poprawnie wykonać kolejkę priorytetową?

Czy byłby to najlepszy sposób na to, aby obiekt był iteracyjny? To wydaje się zbyt nieporządne. Mógłbym zdezorganizować i zakodować, ale to wydaje się nieskuteczne. Może pętla foreach?

Odpowiedz

9

Tak, jeśli chcesz sprawdzić każdy element w kolekcji, prawdopodobnie najlepsze jest ustawienie iterator lub for each.

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

Albo

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

Jeśli nie dbają o zamówieniu (w tym przypadku - dlaczego pan do czynienia z PriorityQueue), należy użyć Iterator. Jeśli chcesz iteracyjne według priorytetu, a następnie zobaczyć porady od Javadoc:

jeśli trzeba uporządkowaną przechodzenie, należy rozważyć użycie Arrays.sort (pq.toArray()).

+1

Dokładnie, jest ona oparta na hałdzie, która zabrania całkowite uporządkowanie w sobie. Dlatego powinieneś zadzwonić na sondę, ponieważ spowoduje to przesianie sterty min/max aż do root. Ale dla jego wymagań, porządkowanie nie ma znaczenia, więc mógł on iterować po a dla każdej pętli. –

+0

Powiedziano mi, że muszę użyć kolejki priorytetowej. Nie ma znaczenia, jaką kolejność przechodzę. Po prostu muszę sprawdzić każdy ciąg znaków obiektu, aby upewnić się, że nie pasuje on do łańcucha oddzielnego obiektu – Anon

2

Jeden mały szczegół: jeśli istnieje jakaś szansa, kolejka może być modyfikowany podczas pętli, a następnie zarówno iterator i for each spowoduje ConcurrentModificationException; jeśli istnieje szansa, kolejka będzie się zmodyfikowane w trakcie przetwarzania, można użyć poll():

Resource resource; 
    while ((resource = resourceQueue.poll()) != null) { 
     this.processIncludes(resourceQueue, resource); 
    } 
Powiązane problemy