PDA

View Full Version : java.util.iterator


bodomTerror
20-11-2006, 17:12
salve, mi spiegate bene ke fa iterator magari anke con un esempio :D

andbin
20-11-2006, 17:29
salve, mi spiegate bene ke fa iterator magari anke con un esempio :DEsempio:
Vector<String> vect = new Vector<String> ();
vect.add ("aaa");
vect.add ("bbb");
vect.add ("ccc");

Iterator<String> iter = vect.iterator ();

while (iter.hasNext ())
{
String s = iter.next ();
System.out.println (s);
}

bodomTerror
20-11-2006, 17:39
grazie x le risposte rapide andbin ;)

PGI-Bis
20-11-2006, 17:43
Ti permette di scorrere il contenuto di un insieme. Come dipende dall'insieme ma se sai fare un ciclo for su un array allora hai anche idea di cosa significhi "scorrere il contenuto": a partire da un certo elemento, il primo restituito da "nextElement", per ogni invocazione successiva di "nextElement" restituisci l'elemento successivo, finchè hai elementi da restituire.

Se prendi un array di N elementi, un Iterator per quell'array direbbe:

la prima invocazione di nextElement restituisce l'elemento in posizione zero.
la seconda invocazione di nextElement restituisce l'elemento in posizione uno.
la terza, la quarta eccetera come sopra finchè l'elemento restituito da nextElement non sia quello di indice N - 1. A quel punto, l'invocazione di nextElement rilascia un errore (NoSuchElementException).

Ti faccio un esempio semplice semplice (pià complicato non sarei probabilmente in grado di farlo :D):

import java.util.*;

public class ArrayIterator implements Iterator<Object>, Iterable<Object> {
/** I dati su cui opera lo scorrimento */
private Object[] data;

/** Questo serve per tenere traccia dello scorrimento */
private int cursor = 0;

public ArrayIterator(Object[] data) {
this.data = data;
}

/** True se il cursore di scorrimento non abbia raggiunto un
valore tale da significare "hey, non ci sono più dati da
scorrere!" */
public boolean hasNext() {
return cursor < data.length;
}

/** Basandosi sul valore del cursore, restituisce il prossimo
elemento o spara un'eccezione NoSuchElementException nel caso
in cui l'iteratore abbia già raggiunto, per effetto di
un'invocazione precedente di next(), l'ultimo elemento da
scorrere */
public Object next() {
if(!hasNext()) {
throw new NoSuchElementException("Ahiahiahiahiahi!!!");
}
return data[cursor++];
}

/** Questo è un altro paio di maniche. remove serve per rimuovere
dalla lista che questo iteratore scorre l'ultimo elemento restituito da
next() che, per noi, sarebbe il componente in posizione "cursor - 1" */
public void remove() {
throw new UnsupportedOperationException("Questo iteratore non supporta la rimozione");
}

/** Questo è il metodo di Iterable e permette a questa classe di
essere usata nel ciclo foreach */
public Iterator<Object> iterator() {
return this;
}
}

Questo è un Main di prova.

public class Main {
public static void main(String[] args) {
Object[] data = {
"A", "B", "C", "D",
};

ArrayIterator iterator = new ArrayIterator(data);
for(Object o : iterator) {
System.out.println(o);
}
}
}

che usa il ciclo foreach perchè ArrayIterator è un Iterable e dunque può essere "foricciato".

PGI-Bis
20-11-2006, 17:44
:D Noto che c'è stata tutta una conversazione mentre finivo di scrivere la mia filippica :D

Lakaj
20-11-2006, 17:46
salve, mi spiegate bene ke fa iterator magari anke con un esempio :D
Mah, io come indice utilizzo il caro vecchio int i per operare sui Vector... :)

bodomTerror
20-11-2006, 17:49
nn ho capito xkè il programma mi funziona così temp.getTime().getTime() e nn così temp.getTime() e basta :confused: