Iterable - Canisius College Computer Science
Download
Report
Transcript Iterable - Canisius College Computer Science
CSC 212 –
Data Structures
Lecture 23:
Iterators
Question of the Day
Thieves guild states it will sell to members:
lock picking kits $0.67 each
40’ rope
$2.12 each
Wire cutters
$4.49 each
How much would one pay for 4 lock
picking kits, 8 ropes, and 5 wire cutters?
Nothing, they’d steal it.
List ADT
Accesses all elements in a Collection
Can
access all elements without removals
set added to accessors and removals
Lists differ how they provide access
IndexList
access via integer ranks
PositionList access via relative
Position
What then defines a List?
Lists
are Iterable
Iterators
Scans collection’s elements
Start
processing with first element…
…then process second element…
…then the third element…
…and so on until processed last element
(Obviously) Associated with other ADTs
Provides
mean of processing elements
Debug structures like Stack, Queue, &
Deque
Using Iterators
Loops can rely on using Iterators
Improves modularity
Use
code with any collection providing iterator
Improves reuse
Leave ADT
implementation issues to Iterator
Write very generic, simple code
Iterator Interface
Important interface defined by Java:
import java.util.Iterator;
...
public class It<E> implements
Iterator<E>{…}
Interface defines 3 methods:
E next();
boolean hasNext() throws
NoSuchElementException;
void remove() throws
UnsupportedOperationException;
How Iterators Work
Iterators keep cursor with current location
Cursor is very implementation specific
structure – cursor could be index
Linked list-based structure – cursor is Node(?)
Array-based
Cursor Ø
elements
Iterable Data Structures
Data structure for which have an iterator
Interface
defined as java.lang.Iterable
Used by List ADT
import java.util.Iterator;
import java.lang.Iterable;
...
public interface List<E> extends
Iterable<E> {
public Iterator<E> iterator();
}
Marks any instances will have an Iterator
Why Bother?
Java provides nice shortcut for Iterables
List<Integer> myList;
...
for (Integer i : myList) {
...
}
does the same thing as if we wrote:
List<Integer> myList;
...
for (Iterator j=myList.iterator();
j.hasNext();){
Integer i = j.next();
...
Limit of Iterator
May not want to iterate over elements
Cannot
change element stored at locations
Interface provides remove() operation, but…
…that is slow, ugly, and painful (at best)
Often define Iterator over positions
In
turn, returns each position
With the position, can make changes desired
Adds method to PositionList interface:
public Iterator<Position<E>>
positions();
Your Turn
Get back into groups and do activity
Before Next Lecture…
Keep up with your reading!
Start Week #10 Assignment
Work on Programming Assignment #2