Class PrefetchIterator<E>

Type Parameters:
E - the element type
All Implemented Interfaces:
java.util.Enumeration<E>, java.util.Iterator<E>

public class PrefetchIterator<E>
extends java.lang.Object
implements java.util.Iterator<E>, java.util.Enumeration<E>
Utility class to help implement an iterator/enumerator in which the hasNext() method needs to calculate the next elements ahead of time.

Many classes which implement an iterator face a common problem: if there is no easy way to calculate hasNext() other than to call getNext(), then they save the result for fetching in the next call to getNext(). This utility helps in doing just that.

Usage: The new iterator class will hold this class as a member variable and forward the hasNext() and next() to it. When creating an instance of this class, you supply it with a functor that is doing the real job of calculating the next element.

  //This class supplies enumeration of integer till 100.
  public class IteratorExample implements Enumeration{
  private int counter=0;
  private PrefetchIterator nextSupplier;

          nextSupplier = new PrefetchIterator(new PrefetchIterator.NextElementFunctor(){

              public Object nextElement() throws NoSuchElementException {
                  if (counter <= 100)
                      throw new NoSuchElementException();
                      return new Integer(counter);

      // forwarding to nextSupplier and return its returned value
      public boolean hasMoreElements() {
          return this.nextSupplier.hasMoreElements();
      // forwarding to nextSupplier and return its returned value
      public Object nextElement() {
          return this.nextSupplier.nextElement();
Assaf Lehr
  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    static interface  PrefetchIterator.NextElementFunctor<EE>
    A functor for the calculation of the next element.
  • Constructor Summary

    Constructor Description
    PrefetchIterator​(PrefetchIterator.NextElementFunctor<E> aEnum)
    Construct a new prefetch iterator.
  • Method Summary

    Modifier and Type Method Description
    boolean hasMoreElements()
    boolean hasNext()
    boolean isEnumerationStartedEmpty()
    Tests whether the enumeration started as an empty one.
    E next()
    E nextElement()
    void remove()

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface java.util.Enumeration


    Methods inherited from interface java.util.Iterator

  • Constructor Details

  • Method Details

    • nextElement

      public E nextElement()
      Specified by:
      nextElement in interface java.util.Enumeration<E>
    • hasMoreElements

      public boolean hasMoreElements()
      Specified by:
      hasMoreElements in interface java.util.Enumeration<E>
    • isEnumerationStartedEmpty

      public boolean isEnumerationStartedEmpty()
      Tests whether the enumeration started as an empty one. It does not matter if it hasMoreElements() now, only at initialization time. Efficiency: if nextElements(), hasMoreElements() were never used, it activates the hasMoreElements() once. Else it is immediately(O(1))
      true if the enumeration started as an empty one, false otherwise.
    • hasNext

      public boolean hasNext()
      Specified by:
      hasNext in interface java.util.Iterator<E>
    • next

      public E next()
      Specified by:
      next in interface java.util.Iterator<E>
    • remove

      public void remove() throws java.lang.UnsupportedOperationException
      Specified by:
      remove in interface java.util.Iterator<E>