410 likes | 584 Views
Dive into the essentials of Abstract Data Types (ADTs) focusing on List ADTs, including their structure and functionalities. Learn how to add elements, retrieve specific items, and iterate over collections without removing elements. This guide uncovers the differences between IndexList and NodeList, highlighting how different ADTs provide access to their elements. Explore the role of iterators, their implementation, and how they enhance your ability to manage data seamlessly across various collection types. Improve your coding practices with modular and reusable methods.
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