problem of the day
Post on 13-Feb-2016
27 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
top related