|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2009
Messaggi: 700
|
[Java] Dubbio su Iterator
Ciao,
mi stavo ripassando gli iteratori ma ho un dubbio...sono andato a vedere anche quì ma il dubbio permane: http://java.sun.com/j2se/1.4.2/docs/.../Iterator.html Il metodo remove() e la sua eventuale implementazione nell'iteratore di una mia particolare collezione che fà esattamente? Rimuove fisicamente l'oggetto dalla mia collezione che stò scorrendo con l'iteratore o cosa? Grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Cosenza
Messaggi: 2971
|
il metodo remove su un iteratore invoca il metodo remove della collection sulla quale sta iterando, passandogli come argomento l'ultimo oggetto ritornato da it.next()
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Prima di far questo però, il metodo remove() dell'iteratore verifica che la collezione sottostante non abbia subito nel frattempo "modifiche strutturali" (sono tali tutte quelle che alterano la struttura della collezione, ovvero la sua dimensione e/o l'ordine degli elementi nella collezione); se la verifica ha esito positivo (la collezione è stata modificata) parte una ConcurrentModificationException. Per maggiori dettagli sul come sia implementata questa verifica (nota come comportamento fail-fast degli iteratori) puoi consultare il sorgente della classe AbstractList, dato che le implementazioni di Iterator e ListIterator sono definite la dentro come classi annidate private (Itr e ListItr). Comunque, in linea di massima una lista mantiene una variabile interna usata come un contatore delle modifiche strutturali che la lista stessa subisce nel corso della sua esistenza: quando un iteratore viene creato (ne viene creato uno nuovo fiammante ad ogni invocazione del metodo iterator()) esso copia al suo interno il valore del contatore; quando poi l'utente lo utilizza per iterare la lista (ovvero durante le chiamate a next(), remove() ecc..) l'iteratore controlla se il valore corrente del contatore della lista corrisponde a quello del valore che si è salvato lui e se non è così significa che siamo in presenza di una "concurrent modification" sulla lista e l'iteratore "fallisce" sparando l'opportuna eccezione. E' un meccanismo molto semplice.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 20-05-2010 alle 17:40. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2009
Messaggi: 700
|
Grazie mille...ora è tutto più chiaro
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:28.




















