Presentation is loading. Please wait.

Presentation is loading. Please wait.

What is Iterator Category: Behavioral Generic Way to Traverse Collection Not Related to Collection Implementation Details Not Related to the direction/fashion.

Similar presentations


Presentation on theme: "What is Iterator Category: Behavioral Generic Way to Traverse Collection Not Related to Collection Implementation Details Not Related to the direction/fashion."— Presentation transcript:

1 What is Iterator Category: Behavioral Generic Way to Traverse Collection Not Related to Collection Implementation Details Not Related to the direction/fashion with which the collection is traversed

2 How to Use Iterator Implementation Details –Have a class (Class A) with which iteration makes sense –Create a class (Class B) that implements the java.util.Iterator interface –Class B should manage the iteration state over Class A for a single client. Usage Details –Call constructing iterator() method on collection object. –Use Iterator object returned to iterate elements (next(), hasNext())

3 How to Use Iterator Example Iterator implementation (note: similar to actual Java implementation) // Note: Some features are not implemented… public class VectorIterator implements java.util.Iterator { private Vector collection; private int cursor=0; public VectorIterator(Vector toIterate) { collection = toIterate; } public boolean hasNext() { return (cursor < collection.size()); } public void next() { cursor++; Object next = collection.get(cursor); }

4 How to Use Iterator Traditional Looping Vector aVector = new Vector(); // load vector with elements // Implementation omitted for(int i=0; i<aVector.size();i++) { Object anElem = aVector.get(i); } Iterator Looping Vector aVector = new Vector(); // load vector with elements // Implementation omitted Iterator elements = aVector.iterator(); while(elements.hasNext()) { Object anElem = elements.next(); }

5 Class Diagram From (Stephen Stelting, Olav Maassen, Applied Java™ Patterns)

6 Why Iterator Hides details of Collection Traversal Avoids the ugly, and sometimes bug-prone index/cursor management (int i=…) The iterator pattern can be used to disperse the cost of expensive object construction

7 In the Real World Java has built in Iterator Support for the Collections Library (java.util.Iterator) Vector, ArrayList, LinkedList, HashSet, TreeSet, etc (Collection.iterator() method). Iterator may be traversing an Array, a LinkedList, or even a binary tree, but the code using the library knows no difference. Developers can reuse the Iterator interface for their own libraries/implementations

8 In the Real World Iterator can be used to defer expensive reads such as database calls and file parsing until it is actually necessary. In combination with the factory pattern, collection type choices can be completely abstracted from the program, and into configuration files.

9 Advanced Java Examples public class CollectionsExample { public static void main(String[] args) { Collection collectionA = null; collectionA = createCollection(args); iterateCollection(collectionA); } public static Collection createCollection(String[] args) { Collection collection = null; if(args[0].equals(“Vector”)) { // returns a index based list walking iterator collection = new Vector(); } else if(args[0].equals(“TreeSet”)) { // returns a tree walking iterator. collection = new TreeSet(); } return collection; } // Loop code stays the same regardless of the implementation public static void iterateCollection(Collection collection) { Iterator elements = collection.iterator(); while(elements.hasNext()) { Object anObj = elements.next(); }


Download ppt "What is Iterator Category: Behavioral Generic Way to Traverse Collection Not Related to Collection Implementation Details Not Related to the direction/fashion."

Similar presentations


Ads by Google