2010-09-02 13 views

risposta

7

Questo non sarebbe thread safe. La raccolta sarebbe solo in grado di mantenere una "posizione corrente" in modo da non poterla scorrere simultaneamente su due thread diversi.

Avere iteratori consente più thread iterativi simultanei che non si calpestano l'un l'altro.

+1

... finché non modificano la raccolta a cui stanno puntando. In quest'ultimo caso, verrà lanciata una ConcurrentModificationException. – gawi

9

Poiché è possibile avere più oggetti Iterator validi per lo stesso oggetto Collection contemporaneamente.

Questo può essere utile. Se Collection ha definito i metodi next e hasNext, questo approccio sarebbe precluso.

+0

Iteratore multiplo? Potresti offrire un esempio? –

+0

Shengyuan Lu: Gli iteratori multipli possono essere generati usando discussioni come sottolinea John Kugelman nella sua risposta. –

+0

Ci sono anche casi in cui si vorrebbe più di un 'Iterator' da un singolo thread. Ad esempio, qualsiasi struttura dati in cui è necessario un lookbehind. – Borealid

2

Il motivo principale è che la raccolta deve avere lo "stato" di iterazione. Non è possibile supportare più iterazioni allo stesso tempo. Gli array PHP hanno qualcosa di simile allo stato di iterazione e mi hanno confuso.

3

Capisco che il motivo per cui gli iteratori sono presi in considerazione dalla raccolta è in modo che possano esserci molti tipi di essi (oltre a spostarsi semplicemente nella raccolta). Puoi creare il tuo iteratore per tornare indietro o fare qualcosa di simile attraverso un grafico DOM visitando tutti i nodi.

Problemi correlati