Il testo dell'esercizio:
L'iteratore standard della classe
Vector<T> scandisce gli elementi dalla posizione 0 fino alla posizione size() - 1.
Scrivere la classe
RevVector<T> che estende
Vector<T> e ridefinisce il solo metodo
iterator(), restituiendo un oggetto della nuova classe
RevVectIterator<T>.
Definire la classe
RevVectIterator<T> che implementa
Iterator<T>, e realizza un iteratore che scandisce gli elementi di un vettore in ordine inverso a quello standard.
Codice di RevVectIterator<T> che implementa Iterator<T>.
codice:
import java.util.*;
public class RevVectIterator<T> implements Iterator<T>
{
private Vector<T> v;
private int curr;
public RevVectIterator(Vector<T> v)
{
this.v = v;
this.curr = this.v.size() - 1;
}
public boolean hasNext()
{
return(curr > 0);
}
public T next() throws NoSuchElementException
{
try
{
return (v.get(curr--));
}
catch (ArrayIndexOutOfBoundsException e)
{
throw new NoSuchElementException();
}
}
public void remove()
{
v.remove(curr);
}
}
Questo codice funziona, l'ho testato richiamando tale classe in modo diretto. Ora devo fare la classe RevVector<T>, quella che ridefinisce solo il metodo iterator() e restituisce un nuovo elemento di tipo RevVectIterator<T>.
Come la faccio? Ho capito che dentro il metodo iterator() che devo ridefinire dovrò creare un nuovo elemento di tipo RevVectIterator<T> e restituirlo, il punto è che il costruttore di RevVectIterator prende un Vector come parametro, cosa gli passo come parametro? Qualcuno può aiutarmi?