41
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

Embed Size (px)

Citation preview

Problem Of The Day

Decipher the following phrase:

STANDS0 _ 2 3 4 5 6 7 8 9

Problem Of The Day

Decipher the following phrase:

STANDS0 _ 2 3 4 5 6 7 8 9

I just knew that

No one understands

LECTURE 29:ITERATOR AND ITERABLE

CSC 212 – Data Structures

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 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 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 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 indices for 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 indices for 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 any

COLLECTION

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 any

COLLECTION

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

Using Iterator

package java.util;public interface Iterator<E> {

boolean hasNext();

E next() throws NoSuchElementException;

void remove() throws UnsupportedOperationException;

}

Iterator Interface

Maintain a cursor showing where they work Value at cursor returned when next()

called Very implementation specific issues for

cursor To iterate over an INDEXLIST, cursor must

be index Cursor is POSITION for POSITIONLIST’s

ITERATOR

How Iterators Work

Maintain a cursor showing where they work Value at cursor returned when next()

called Very implementation specific issues for

cursor To iterate over an INDEXLIST, cursor must

be index Cursor is POSITION for POSITIONLIST’s

ITERATOR

How Iterators Work

LIST

Maintain a cursor showing where they work Value at cursor returned when next()

called Very implementation specific issues for

cursor To iterate over an INDEXLIST, cursor must

be index Cursor is POSITION for POSITIONLIST’s

ITERATOR

How Iterators Work

IteratorCursor 0

LIST

Maintain a cursor showing where they work Value at cursor returned when next()

called Very implementation specific issues for

cursor To iterate over an INDEXLIST, cursor must

be index Cursor is POSITION for POSITIONLIST’s

ITERATOR

How Iterators Work

LIST

IteratorCursor 0

Maintain a cursor showing where they work Value at cursor returned when next()

called Very implementation specific issues for

cursor To iterate over an INDEXLIST, cursor must

be index Cursor is POSITION for POSITIONLIST’s

ITERATOR

How Iterators Work

LIST

IteratorCursor 1

Maintain a cursor showing where they work Value at cursor returned when next()

called Very implementation specific issues for

cursor To iterate over an INDEXLIST, cursor must

be index Cursor is POSITION for POSITIONLIST’s

ITERATOR

How Iterators Work

LIST

IteratorCursor 2

Maintain a cursor showing where they work Value at cursor returned when next()

called Very implementation specific issues for

cursor To iterate over an INDEXLIST, cursor must

be index Cursor is POSITION for POSITIONLIST’s

ITERATOR

How Iterators Work

LIST

IteratorCursor 3

Maintain a cursor showing where they work Value at cursor returned when next()

called Very implementation specific issues for

cursor To iterate over an INDEXLIST, cursor must

be index Cursor is POSITION for POSITIONLIST’s

ITERATOR

How Iterators Work

LIST

IteratorCursor ???

Maintain a cursor showing where they work Value at cursor returned when next()

called Very implementation specific issues for

cursor To iterate over an INDEXLIST, cursor must

be index Cursor is POSITION for POSITIONLIST’s

ITERATOR

How Iterators Work

LIST

IteratorCursor 5

Iterator for INDEXLIST

public class IndexListIterator<E> {

private IndexList<E> theList;private int cursor;

public IndexListIterator(IndexList<E> list) { theList = list; cursor = 0;}

public boolean hasNext() { return cursor != 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

cursor is next Position in PositionList

Needing to know class specifics avoided Rely on POSITIONLIST’s methods instead

head tail

elements

Iterator

Cursor

POSITION with Benefits

cursor is next Position in PositionList

Needing to know class specifics avoided Rely on POSITIONLIST’s methods instead

head tail

elements

Iterator

Cursor

POSITION with Benefits

cursor is next Position in PositionList

Needing to know class specifics avoided Rely on POSITIONLIST’s methods instead

head tail

elements

Iterator

Cursor

POSITION with Benefits

cursor is next Position in PositionList

Needing to know class specifics avoided Rely on POSITIONLIST’s methods instead

head tail

elements

Iterator

Cursor

POSITION with Benefits

cursor is next Position in PositionList

Needing to know class specifics avoided Rely on POSITIONLIST’s methods instead

head tail

elements

Iterator

•Cursor

Iterator for POSIIONLIST

private PositionList<E> theList;private Position<E> cursor;

public boolean hasNext() { return cursor != null;}

public E next() throws NoSuchElementException { if (cursor == null) { throw new NoSuchElementException(); } E retVal = cursor.element(); if (cursor != theList.last()) { cursor = theList.next(cursor); } else { cursor = null; } return retVal;}

ITERABLE

Why Should You Care?

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> { public Iterator<E> iterator();}

For-each for the Win

Iterable support built-in to Java for free As is any class in the java.lang package

For-each loops work with any Iterable class Uses Iterator to loop over each element

in class

Slightly different loop than normal for loopfor (Type variableName : IterableName)

IndexList<Integer> idx = …;for (Integer i : idx) { … }

Integer findLargest(Iterable<Integer> able) {Integer retVal = Integer.MIN_VALUE; for (Integer datum : able) { if (datum > retVal) { retVal = datum; }}return retVal;

}

able could be LIST, HASHMAP, VERTEXSET…

For-Each Rocks The Hizzy

Your Turn

Get into your groups and complete activity

About the Grading

For Next Lecture

Read GT 6.4 before Wednesday’s lecture What if we want indices & 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