410 likes | 559 Views
Problem Of The Day. Decipher the following phrase: STANDS 0 _ 2 3 4 5 6 7 8 9. Problem Of The Day. Decipher the following phrase: STANDS 0 _ 2 3 4 5 6 7 8 9 I just knew that No one understands. CSC 212 – Data Structures. Lecture 29: Iterator and Iterable. List ADT.
E N D
Problem Of The Day • Decipher the following phrase: STANDS 0 _ 2 3 4 5 6 7 8 9
Problem Of The Day • Decipher the following phrase: STANDS 0 _ 2 3 4 5 6 7 8 9 • I just knew that No one understands
CSC 212 – Data Structures Lecture 29:Iterator and Iterable
List ADT • Collection which we can access all elements • Add element before an existing one • Return the Collection’s 3rd element • Loop over all elements without removing them • List ADTs differ in how they provide access • IndexListuses indices for absolution positioning • Can only use relative positions in NodeList
List ADT • Collection which we can access all elements • Add element before an existing one • Return the Collection’s 3rd element • Loop over all elements without removing them • List ADTs differ in how they provide access • IndexListuses indices for absolution positioning • Can only use relative positions in NodeList
List ADT • Collection which we can access all elements • Add element before an existing one • Return the Collection’s 3rd element • Loop over all elements without removing them • List ADTs differ in how they provide access • IndexList uses indicesfor absolution positioning • Can only use relative positions in NodeList
List ADT • Collection which we can access all elements • Add element before an existing one • Return the Collection’s 3rd element • Loop over all elements without removing them • List ADTs differ in how they provide access • IndexList uses indicesfor absolution positioning • Can only use relative positions in NodeList Must violate ADT to access List’s elements
Oops… • Collection which we can access all elements • Add element before an existing one • Return the Collection’s 3rd element • Loop over all elements without removing them • List ADTs differ in how they provide access • IndexList uses indicesfor absolution positioning • Can only use relative positions in NodeList Must violate ADT to access List’s elements
Iterators • Scans elements in a Collection • Initial use will return first element… • …then second element returned with next call… • …returns the third element next… • …and so on until it moves past the last element • Iterator instance returned by another ADT • Process data without hard-coding ADT into method • Makes it easy to write code using anyCollection
Iterators • Scans elements in a Collection • Initial use will return first element… • …then second element returned with next call… • …returns the third element next… • …and so on until it moves past the last element • Iterator instance returned by another ADT • Process data without hard-coding ADT into method • Makes it easy to write code using anyCollection
Using Iterator • Write loops using an Iterator • Iterator can be used to get data from anything • Combine structures’ elements using Iterator • Improves modularity • Classes work with anything providing an Iterator • Improves reuse • Ignore details of how to access elements within ADT • Very simple code leaves hard part to Iterator
Iterator Interface package java.util; public interface Iterator<E> {booleanhasNext();Enext() throws NoSuchElementException;void remove() throws UnsupportedOperationException; }
How Iterators Work • Maintain a cursorshowing where they work • Value at cursor returned when next() called • Veryimplementation specific issues for cursor • To iterate over an IndexList, cursor must be index • Cursor is Position for PositionList’sIterator
How Iterators Work • Maintain a cursorshowing where they work • Value at cursor returned when next() called • Veryimplementation specific issues for cursor • To iterate over an IndexList, cursor must be index • Cursor is Position for PositionList’sIterator List
How Iterators Work • Maintain a cursorshowing where they work • Value at cursor returned when next() called • Veryimplementation specific issues for cursor • To iterate over an IndexList, cursor must be index • Cursor is Position for PositionList’sIterator List
How Iterators Work • Maintain a cursorshowing where they work • Value at cursor returned when next() called • Veryimplementation specific issues for cursor • To iterate over an IndexList, cursor must be index • Cursor is Position for PositionList’sIterator List
How Iterators Work • Maintain a cursorshowing where they work • Value at cursor returned when next() called • Veryimplementation specific issues for cursor • To iterate over an IndexList, cursor must be index • Cursor is Position for PositionList’sIterator List
How Iterators Work • Maintain a cursorshowing where they work • Value at cursor returned when next() called • Veryimplementation specific issues for cursor • To iterate over an IndexList, cursor must be index • Cursor is Position for PositionList’sIterator List
How Iterators Work • Maintain a cursorshowing where they work • Value at cursor returned when next() called • Veryimplementation specific issues for cursor • To iterate over an IndexList, cursor must be index • Cursor is Position for PositionList’sIterator List
How Iterators Work • Maintain a cursorshowing where they work • Value at cursor returned when next() called • Veryimplementation specific issues for cursor • To iterate over an IndexList, cursor must be index • Cursor is Position for PositionList’sIterator List
How Iterators Work • Maintain a cursorshowing where they work • Value at cursor returned when next() called • Veryimplementation specific issues for cursor • To iterate over an IndexList, cursor must be index • Cursor is Position for PositionList’sIterator List
Iteratorfor IndexList public class IndexListIterator<E> {privateIndexList<E>theList;privateintcursor;public IndexListIterator(IndexList<E> list) {theList= list;cursor = 0;} public booleanhasNext(){ returncursor!= theList.size();}// More goes here…
Limit of Iterator • Defines limited set of methods • Cannot add or change elements in Collection • Changes to data elsewhere invalidates Iterator • Interface provides remove(), but… • …implementing it is a royal pain in the • Support not required by the interface • Instead throw UnsupportedOperationException • Relying on remove()risky,since it is optional • When in doubt, skip it
Position with Benefits • cursoris next Positionin PositionList • Needing to know class specifics avoided • Rely on PositionList’s methods instead head tail elements
Position with Benefits • cursoris next Positionin PositionList • Needing to know class specifics avoided • Rely on PositionList’s methods instead head tail elements
Position with Benefits • cursoris next Positionin PositionList • Needing to know class specifics avoided • Rely on PositionList’s methods instead head tail elements
Position with Benefits • cursoris next Positionin PositionList • Needing to know class specifics avoided • Rely on PositionList’s methods instead head tail elements
Position with Benefits • cursoris next Positionin PositionList • Needing to know class specifics avoided • Rely on PositionList’s methods instead head tail elements
Iteratorfor PosiionList privatePositionList<E>theList;privatePosition<E>cursor;public booleanhasNext(){ returncursor!= null;}public Enext() throwsNoSuchElementException{if (cursor== null) {throw new NoSuchElementException(); }EretVal=cursor.element(); if (cursor!=theList.last()) {cursor=theList.next(cursor);} else {cursor = null; } return retVal;}
Why Should You Care? Iterable
Iterable Interface • So simple makes Iterator look complex
Iterable Interface • So simple makes Iterator look complex • Get ready for this– it is really big!
Iterable Interface • So simple makes Iterator look complex • Get ready for this– it is really big! • Rocks your world and makes code easy to write
Iterable Interface • So simple makes Iterator look complex • Get ready for this– it is really big! • Rocks your world and makes code easy to write • Java’s prettiest feature relies on this interface
Iterable Interface • So simple makes Iterator look complex • Get ready for this– it is really big! • Rocks your world and makes code easy to write • Java’s prettiest feature relies on this interface
Iterable Interface • So simple makes Iterator look complex • Get ready for this– it is really big! • Rocks your world and makes code easy to write • Java’s prettiest feature relies on this interface package java.lang; public interface Iterable<E> {publicIterator<E> iterator(); }
For-each for the Win • Iterablesupport built-into Java for free • As is any class in the java.lang package • For-each loops workwith any Iterable class • Uses Iteratorto loop over each element in class • Slightly different loop than normal for loopfor (Type variableName: IterableName)IndexList<Integer>idx = …;for (Integeri :idx) { … }
For-Each Rocks The Hizzy IntegerfindLargest(Iterable<Integer>able) {IntegerretVal=Integer.MIN_VALUE;for (Integerdatum:able) {if (datum>retVal) {retVal=datum; }}return retVal; } • able could be List, HashMap, VertexSet…
Your Turn • Get into your groups and complete activity
For Next Lecture • Read GT 6.4 before Wednesday’s lecture • What if we wantindices & Positions? • Can we handle power to switch between the two? • What implementation issues do Sequences cause? • Week #10 assignment available on Angel • Programming Assignment #2 due in 12 days