Computer Science 210
Data Structures
Fall 2017, Siena College
Iterators BlueJ Project
Click here to download a BlueJ project for Iterators.
Iterators Source Code
The Java source code for Iterators is below. Click on a file name to download it.
import structure5.*; import java.util.Iterator; /** Testing class for Iterator examples @author Jim Teresco, originally in 2009 */ public class Iterators { public static final int SIZE = 10; public static void main(String args[]) { // create a vector of integers for testing Vector<Integer> v = new Vector<Integer>(SIZE); for (int i=0; i<SIZE; i++) { v.add(i); } // traverse with the standard iterator System.out.println("Standard iterator:"); Iterator<Integer> vi = v.iterator(); while (vi.hasNext()) { System.out.println(vi.next()); } // traverse with even-only iterator System.out.println("Even-only iterator:"); vi = new VectorEvenIterator<Integer>(v); while (vi.hasNext()) { System.out.println(vi.next()); } // traverse with prefix sum iterator System.out.println("Prefix sum iterator:"); vi = new PrefixSumIterator(v); while (vi.hasNext()) { System.out.println(vi.next()); } } }
import structure5.*; /** * An iterator class for implementing an iterator over a Vector * of numbers that returns the prefix sum of the numbers rather * than the numbers themselves. That is, the sum of all values * up to and include the current. * * @author, Jim Teresco, 2009 */ public class PrefixSumIterator extends AbstractIterator<Integer> { /** * The associated vector */ protected Vector<Integer> theVector; /** * The index of the current value. */ protected int current; /** The prefix sum of the items encountered so far. */ protected int prefixSum; /** * Construct a vector iterator to traverse vector v * * @post constructs an initialized iterator associated with v * * @param v The underlying vector. */ public PrefixSumIterator(Vector<Integer> v) { theVector = v; reset(); } /** * Reset the vector iterator to the first value in the vector. * * @post the iterator is reset to the beginning of the traversal */ public void reset() { current = 0; prefixSum = 0; } /** * Determine if some of the elements have yet to be considered. * * @post returns true if there is more structure to be traversed * * @return True if more elements are to be considered. */ public boolean hasNext() { return current < theVector.size(); } /** * Fetch a reference to the current value. * * @pre traversal has more elements * @post returns the current value referenced by the iterator * * @return A reference to the current value being considered. */ public Integer get() { return new Integer(prefixSum+theVector.get(current).intValue()); } /** * Return current value, and increment iterator to next * value to be returned (the next even-numbered entry) * * @pre traversal has more elements * @post increments the iterated traversal * * @return the prefix sum of the values up to the current */ public Integer next() { prefixSum += theVector.get(current).intValue(); current++; return new Integer(prefixSum); } }
import structure5.*; /** * An iterator class for implementing an iterator over a Vector that * returns only the elements at even-numbered indices. * * Based on VectorIterator from Duane Bailey's stucture package * * @author, Jim Teresco, 2009 */ public class VectorEvenIterator<E> extends AbstractIterator<E> { /** * The associated vector */ protected Vector<E> theVector; /** * The index of the current value. */ protected int current; /** * Construct a vector iterator to traverse vector v * * @post constructs an initialized iterator associated with v * * @param v The underlying vector. */ public VectorEvenIterator(Vector<E> v) { theVector = v; reset(); } /** * Reset the vector iterator to the first value in the vector. * * @post the iterator is reset to the beginning of the traversal */ public void reset() { current = 0; } /** * Determine if some of the elements have yet to be considered. * * @post returns true if there is more structure to be traversed * * @return True if more elements are to be considered. */ public boolean hasNext() { return current < theVector.size(); } /** * Fetch a reference to the current value. * * @pre traversal has more elements * @post returns the current value referenced by the iterator * * @return A reference to the current value being considered. */ public E get() { return theVector.get(current); } /** * Return current value, and increment iterator to next * value to be returned (the next even-numbered entry) * * @pre traversal has more elements * @post increments the iterated traversal by 2 * * @return A reference to the current value, before increment. */ public E next() { E result = theVector.get(current); current+=2; return result; } }