Iterators. Chapter Scope The purpose of an iterator The Iterator and Interable interfaces The concept of fail-fast collections Using iterators to solve.

Slides:



Advertisements
Similar presentations
Chapter 23 Organizing list implementations. This chapter discusses n The notion of an iterator. n The standard Java library interface Collection, and.
Advertisements

Chapter 15 Lists. Chapter Scope Types of list collections Using lists to solve problems Various list implementations Comparing list implementations Java.
Chapter 5 Queues Modified. Chapter Scope Queue processing Comparing queue implementations 5 - 2Java Software Structures, 4th Edition, Lewis/Chase.
Chapter 7 Iterators Modified. Chapter Scope The purpose of an iterator The Iterator and Interable interfaces The concept of fail-fast collections Using.
Chapter 15 Lists.
CSE 143 Lecture 22: Advanced List Implementation (ADTs; interfaces; abstract classes; inner classes; generics; iterators)
Iterators Chapter 7. Chapter Contents What is an Iterator? A Basic Iterator Visits every item in a collection Knows if it has visited all items Doesn’t.
Chapter 14 Queues. First a Review Queue processing Using queues to solve problems – Optimizing customer service simulation – Ceasar ciphers – Palindrome.
COMP 103 Iterators and Iterable. RECAP  Maps and Queues TODAY  Queue Methods  Iterator and Iterable 2 RECAP-TODAY.
Chapter 4 Linked Structures – Stacks Modified. Chapter Scope Object references as links Linked vs. array-based structures Managing linked lists Linked.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
Chapter 3 Introduction to Collections – Stacks Modified
Lists Based on content from: Java Foundations, 3rd Edition.
Chapter 8 Lists. Copyright © 2004 Pearson Addison-Wesley. All rights reserved.1-2 Chapter Objectives Examine list processing and various ordering techniques.
COS 312 DAY 21 Tony Gauvin. Ch 1 -2 Agenda Questions? Last Capstone Progress reports due April 23 Assignment 6 Due Assignment 7 Posted – Chapters 15,
Chapter 6 Array-Based Lists.
EECE 310: Software Engineering Iteration Abstraction.
Chapter 10-A Trees Modified
Java I/O Writing and Reading Objects to File Serialization.
Chapter 13 Sets and Maps Modified. Chapter Scope The Java API set and map collections Using sets and maps to solve problems How the Java API implements.
LinkedList Many slides from Horstmann modified by Dr V.
Linked Lists Ellen Walker CPSC 201 Data Structures Hiram College.
CHAPTER 5 ArrayLists.
CSE 143 Lecture 24 Advanced collection classes (ADTs; abstract classes; inner classes; generics; iterators) read 11.1, 9.6, , slides.
© 2005 Pearson Education, Inc., Upper Saddle River, NJ. All rights reserved. Data Structures for Java William H. Ford William R. Topp Chapter 13 Implementing.
Chapter 3 Collections. Objectives  Define the concepts and terminology related to collections  Explore the basic structures of the Java Collections.
Collections Mrs. C. Furman April 21, Collection Classes ArrayList and LinkedList implements List HashSet implements Set TreeSet implements SortedSet.
Chapter 6 Lists Modified. Chapter Scope Types of lists Using lists to solve problems Various list implementations Comparing list implementations 6 - 2Java.
List Interface and Linked List Mrs. Furman March 25, 2010.
Iterators ITI 1121 N. El Kadri. Motivation Given a (singly) linked-list implementation of the interface List, defined as follows, public interface List.
CS 116 OBJECT ORIENTED PROGRAMMING II LECTURE 12 GEORGE KOUTSOGIANNAKIS Copyright: 2015 Illinois Institute of Technology/ George Koutsogiannakis 1.
Introduction to Collections. Collections Collections provide a way of organizing related data in a model Different types of collections have different.
JAVA: An Introduction to Problem Solving & Programming, 6 th Ed. By Walter Savitch ISBN © 2012 Pearson Education, Inc., Upper Saddle River,
© 2010 Pearson Addison-Wesley. All rights reserved. Addison Wesley is an imprint of CHAPTER 15: Sets and Maps Java Software Structures: Designing and Using.
Topic 13 Iterators. 9-2 Motivation We often want to access every item in a data structure or collection in turn We call this traversing or iterating over.
CSE 143 Lecture 12: Sets and Maps reading:
1 Example: LinkedStack LinkedStack UML Class Diagram LinkedStack Class LinkedStack Attributes/Constructor LinkedStack Methods LinkedStack iterator method.
CSE 1020: Exceptions and A multiclass application Mark Shtern 1-1.
Recursive Objects Singly Linked List (Part 2) 1. Operations at the head of the list  operations at the head of the list require special handling because.
COS 312 DAY 23 Tony Gauvin. Ch 1 -2 Agenda Questions? Capstone progress report Overdue Assignment 6 Over Due Assignment 7 (bonus) – Due May 11 – Will.
Iterators. Iterator  An iterator is any object that allows one to step through each element in a list (or, more generally, some collection).
1 Iterators & the Collection Classes. 2 » The Collection Framework classes provided in the JAVA API(Application Programmer Interface) contains many type.
Linked Structures - Stacks. Linked Structures An alternative to array-based implementations are linked structures A linked structure uses object references.
OBJECT ORIENTED PROGRAMMING II LECTURE 21 GEORGE KOUTSOGIANNAKIS
Linked Data Structures
Iterators.
CHAPTER 4: Linked Structures
The List ADT.
The List ADT Reading: Textbook Sections 3.1 – 3.5
Chapter 12: Data Structures
Chapter 16 Iterators.
Chapter 6 Lists.
Top Ten Words that Almost Rhyme with “Peas”
Chapter 4 Linked Structures - Stacks
Chapter 7 Iterators.
Java Software Structures: John Lewis & Joseph Chase
Chapter 4 Linked Structures - Stacks
The List ADT Reading: Textbook Sections 3.1 – 3.5
Lecture 26: Advanced List Implementation
Copyright ©2012 by Pearson Education, Inc. All rights reserved
slides adapted from Marty Stepp
Java Software Structures: John Lewis & Joseph Chase
Dynamic Data Structures and Generics
Example: LinkedSet<T>
Computer Science and Engineering
OBJECT ORIENTED PROGRAMMING II LECTURE 22 GEORGE KOUTSOGIANNAKIS
TCSS 143, Autumn 2004 Lecture Notes
CSE 143 Lecture 21 Advanced List Implementation
The command invocation protocol
CHAPTER 3: Collections—Stacks
Presentation transcript:

Iterators

Chapter Scope The purpose of an iterator The Iterator and Interable interfaces The concept of fail-fast collections Using iterators to solve problems Iterator implementations 7 - 2Java Software Structures, 4th Edition, Lewis/Chase

Iterators Using various methods, the user could write code to access each element in a collection, but it would be slightly different for each collection An iterator is an object that allows the user to acquire and use each element in a collection It works with a collection, but is a separate object An iterator simplifies the classic step of processing elements in a collection 7 - 3Java Software Structures, 4th Edition, Lewis/Chase

Iterators There are two key interfaces in the Java API related to iterators: – Iterator – used to define an iterator – Iterable – used to define a collection that provides an iterator A collection is Iterable, which means it will provide an Iterator when requested 7 - 4Java Software Structures, 4th Edition, Lewis/Chase

Iterators The Iterator interface: The Iterable interface: 7 - 5Java Software Structures, 4th Edition, Lewis/Chase MethodDescription boolean hasNext()Returns true if the iteration has more elements. E next()Returns the next element in the iterator. void remove()Removes the last element returned by the iteration from the underlying collection. MethodDescription Iterator iterator()Returns an iterator over a set of elements of type E.

Iterators Suppose myList is an ArrayList of Book objects Iterator itr = myList.iterator(); while (itr.hasNext()) System.out.println(itr.next()); The first line obtains the iterator, then the loop uses hasNext and next to access and print each book 7 - 6Java Software Structures, 4th Edition, Lewis/Chase

Iterators A for-each loop can be used for the same goal: for (Book book : myList) System.out.println(book); The for-each loop uses an iterator behind the scenes The for-each loop can be used on any object that is Iterable 7 - 7Java Software Structures, 4th Edition, Lewis/Chase

Iterators You may want to use an iterator explicitly if you don't want to process all elements – i.e., searching for a particular element You may also use an explicit iterator if you want to call the remove method The for-each loop does not give access to the iterator, so remove cannot be called 7 - 8Java Software Structures, 4th Edition, Lewis/Chase

Iterators You shouldn't assume that an iterator will deliver the elements in any particular order unless the documentation explicitly says you can Also, remember that an iterator is accessing the elements stored in the collection The structure of the underlying collection should not be changed while an iterator is being used Most iterators in the Java API are fail-fast, meaning they throw an exception if the collection is modified while the iterator is active 7 - 9Java Software Structures, 4th Edition, Lewis/Chase

Program of Study Revisited The ProgramOfStudy class was introduced in the last chapter It implements the Iterable interface Its iterator method returns the iterator provided by the list The POSGrades class uses a for-each loop to print courses with a grade of A or A Java Software Structures, 4th Edition, Lewis/Chase

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * Represents a Program of Study, a list of courses taken and planned, for an * individual student. * Lewis and Chase 4.0 */ public class ProgramOfStudy implements Iterable, Serializable { private List list; /** * Constructs an initially empty Program of Study. */ public ProgramOfStudy() { list = new LinkedList (); } Java Software Structures, 4th Edition, Lewis/Chase

/** * Adds the specified course to the end of the course list. * course the course to add */ public void addCourse(Course course) { if (course != null) list.add(course); } /** * Finds and returns the course matching the specified prefix and number. * prefix the prefix of the target course number the number of the target course the course, or null if not found */ public Course find(String prefix, int number) { for (Course course : list) if (prefix.equals(course.getPrefix()) && number == course.getNumber()) return course; return null; } Java Software Structures, 4th Edition, Lewis/Chase

/** * Adds the specified course after the target course. Does nothing if * either course is null or if the target is not found. * target the course after which the new course will be added newCourse the course to add */ public void addCourseAfter(Course target, Course newCourse) { if (target == null || newCourse == null) return; int targetIndex = list.indexOf(target); if (targetIndex != -1) list.add(targetIndex + 1, newCourse); } Java Software Structures, 4th Edition, Lewis/Chase

/** * Replaces the specified target course with the new course. Does nothing if * either course is null or if the target is not found. * target the course to be replaced newCourse the new course to add */ public void replace(Course target, Course newCourse) { if (target == null || newCourse == null) return; int targetIndex = list.indexOf(target); if (targetIndex != -1) list.set(targetIndex, newCourse); } /** * Creates and returns a string representation of this Program of Study. * a string representation of the Program of Study */ public String toString() { String result = ""; for (Course course : list) result += course + "\n"; return result; } Java Software Structures, 4th Edition, Lewis/Chase

/** * Returns an iterator for this Program of Study. * an iterator for the Program of Study */ public Iterator iterator() { return list.iterator(); } /** * Saves a serialized version of this Program of Study to the specified * file name. * fileName the file name under which the POS will be stored IOException */ public void save(String fileName) throws IOException { FileOutputStream fos = new FileOutputStream(fileName); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(this); oos.flush(); oos.close(); } Java Software Structures, 4th Edition, Lewis/Chase

/** * Loads a serialized Program of Study from the specified file. * fileName the file from which the POS is read the loaded Program of Study IOException ClassNotFoundException */ public static ProgramOfStudy load(String fileName) throws IOException, ClassNotFoundException { FileInputStream fis = new FileInputStream(fileName); ObjectInputStream ois = new ObjectInputStream(fis); ProgramOfStudy pos = (ProgramOfStudy) ois.readObject(); ois.close(); return pos; } Java Software Structures, 4th Edition, Lewis/Chase

import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; /** * Demonstrates the use of an Iterable object (and the technique for reading * a serialzed object from a file). * Lewis and Chase 4.0 */ public class POSGrades { /** * Reads a serialized Program of Study, then prints all courses in which * a grade of A or A- was earned. */ public static void main(String[] args) throws Exception { ProgramOfStudy pos = ProgramOfStudy.load("ProgramOfStudy"); System.out.println(pos); System.out.println("Classes with Grades of A or A-\n"); for (Course course : pos) { if (course.getGrade().equals("A") || course.getGrade().equals("A-")) System.out.println(course); } Java Software Structures, 4th Edition, Lewis/Chase

Program of Study Revisited Now we'll use an iterator to remove any course in the program of study that doesn't already have a grade Since the iterator's remove method will be used, we cannot use a for-each loop Java Software Structures, 4th Edition, Lewis/Chase

import java.io.FileInputStream; import java.io.ObjectInputStream; import java.util.Iterator; /** * Demonstrates the use of an explicit iterator. * Lewis and Chase 4.0 */ public class POSClear { /** * Reads a serialized Program of Study, then removes all courses that * don't have a grade. */ public static void main(String[] args) throws Exception { ProgramOfStudy pos = ProgramOfStudy.load("ProgramOfStudy"); System.out.println(pos); System.out.println("Removing courses with no grades.\n"); Java Software Structures, 4th Edition, Lewis/Chase

Iterator itr = pos.iterator(); while (itr.hasNext()) { Course course = itr.next(); if (!course.taken()) itr.remove(); } System.out.println(pos); pos.save("ProgramOfStudy"); } Java Software Structures, 4th Edition, Lewis/Chase

Implementing Array-based Iterators Our ArrayList class contains a private inner class that defines an iterator for the list An iterator is an appropriate use for an inner class because of its intimate relationship with the outer class (the collection) It maintains a modification count that is initialized to the current number of elements in the collection If those counts get out of a sync, the iterator throws a ConcurrentModificationException Java Software Structures, 4th Edition, Lewis/Chase

/** * ArrayListIterator iterator over the elements of an ArrayList. */ private class ArrayListIterator implements Iterator { int iteratorModCount; int current; /** * Sets up this iterator using the specified modCount. modCount the current modification count for the ArrayList */ public ArrayListIterator() { iteratorModCount = modCount; current = 0; } Java Software Structures, 4th Edition, Lewis/Chase

/** * Returns true if this iterator has at least one more element * to deliver in the iteration. true if this iterator has at least one more element to deliver * in the iteration ConcurrentModificationException if the collection has changed * while the iterator is in use */ public boolean hasNext() throws ConcurrentModificationException { if (iteratorModCount != modCount) throw new ConcurrentModificationException(); return (current < rear); } Java Software Structures, 4th Edition, Lewis/Chase

/** * Returns the next element in the iteration. If there are no * more elements in this iteration, a NoSuchElementException is * thrown. the next element in the iteration NoSuchElementException if an element not found exception occurs ConcurrentModificationException if the collection has changed */ public T next() throws ConcurrentModificationException { if (!hasNext()) throw new NoSuchElementException(); current++; return list[current - 1]; } Java Software Structures, 4th Edition, Lewis/Chase

/** * The remove operation is not supported in this collection. UnsupportedOperationException if the remove method is called */ public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } Java Software Structures, 4th Edition, Lewis/Chase

Implementing Linked-Based Iterators Similarly, an iterator can use links Like the previous example, the LinkedListItertor class is implemented as a private inner class Java Software Structures, 4th Edition, Lewis/Chase

/** * LinkedIterator represents an iterator for a linked list of linear nodes. */ private class LinkedListIterator implements Iterator { private int iteratorModCount; // the number of elements in the collection private LinearNode current; // the current position /** * Sets up this iterator using the specified items. collection the collection the iterator will move over size the integer size of the collection */ public LinkedListIterator() { current = head; iteratorModCount = modCount; } Java Software Structures, 4th Edition, Lewis/Chase

/** * Returns true if this iterator has at least one more element * to deliver in the iteration. true if this iterator has at least one more element to deliver * in the iteration ConcurrentModificationException if the collection has changed * while the iterator is in use */ public boolean hasNext() throws ConcurrentModificationException { if (iteratorModCount != modCount) throw new ConcurrentModificationException(); return (current != null); } Java Software Structures, 4th Edition, Lewis/Chase

/** * Returns the next element in the iteration. If there are no * more elements in this iteration, a NoSuchElementException is * thrown. the next element in the iteration NoSuchElementException if the iterator is empty */ public T next() throws ConcurrentModificationException { if (!hasNext()) throw new NoSuchElementException(); T result = current.getElement(); current = current.getNext(); return result; } Java Software Structures, 4th Edition, Lewis/Chase

/** * The remove operation is not supported. UnsupportedOperationException if the remove operation is called */ public void remove() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } Java Software Structures, 4th Edition, Lewis/Chase