1 / 41

# Problem Of The Day - PowerPoint PPT Presentation

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.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

Problem Of The Day

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - 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

• 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

• 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

• 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

• 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

• 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

tail

elements

### Position with Benefits

• cursoris next Positionin PositionList

• Needing to know class specifics avoided

• Rely on PositionList’s methods instead

tail

elements

### Position with Benefits

• cursoris next Positionin PositionList

• Needing to know class specifics avoided

• Rely on PositionList’s methods instead

tail

elements

### Position with Benefits

• cursoris next Positionin PositionList

• Needing to know class specifics avoided

• Rely on PositionList’s methods instead

tail

elements

### Position with Benefits

• cursoris next Positionin PositionList

• Needing to know class specifics avoided

• Rely on PositionList’s methods instead

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;}

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

• 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…

• 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