Collection, Iterable, and Iterator Interfaces

advertisement
Collection, Iterable, and Iterator Interfaces
•
•
•
•
The Collection Interface and its Hierarchy
The Iterable and Iterator Interfaces
For-each Loops with Iterable Collections
Reading: L&C 3rd: 15.1-15.2 2nd:3.2
1
Collections
• A collection is a typical example of Abstract
Data Type.
• A collection is a data type that contains and
allows access to a group of objects.
• The Collection ADT is the most general form of
ADTs designed for containing/accessing a
group of objects.
• We have more specific forms of Collection
ADTs which describe the access “strategy” that
2
models that collection:
The Java Collections API
• The classes and interfaces in the Java
Collections Library are named to indicate
the underlying data structure and the
abstract Data type.
• For example, the ArrayList we studied in
CS110 uses an underlying array as the data
structure for storing its objects and
implements its access model as a list
• However, from the user’s code point of view,
3
the data structure is hidden by the
API.
The Collection Interface
• Any class that implements the Collection
interface can contain/access a group of objects
• The type of objects that a Collection class
contains can be specified using generics <T>
• ArrayList class implements Collection
• Hence, polymorphism allows us to do these:
ArrayList<String> a = new ArrayList<String>();
Collection<String> c = a; // widening
ArrayList<String> d = (ArrayList<String>) c;
4
Collection Interface Methods
boolean add(T o)
addAll(Collection c)
void clear()
boolean contains(T o)
boolean containsAll(Collection c)
boolean equals(Object o)
int hashCode()
boolean isEmpty()
5
Collection Interface Methods
Iterator iterator()
boolean remove(T o)
boolean removeAll(Collection c)
boolean retainAll(Collection c)
int size()
Object [] toArray()
<T> T[] toArray(T[] a)
6
The Collection Interface Hierarchy
• Typically, the Collection interface is not
implemented directly by a class
• There is a hierarchy of interfaces that
extend the Collection interface
• Each subclass of the Collection interface
is designed to support a specific model for
access to the contents of the collection
– List, Set, Stack, Queue, etc.
7
Java Collection Hierarchy
Collection
AbstractCollection
TreeSet
Abstract Class
Interface
Class
Set
List
AbstractSet
AbstractList
HashSet
ArrayList
List Methods
•
boolean add(T elem)
void add(int index, T elem)
boolean addAll(int index, Collection c)
T get(int index)
T remove(int index)
T set(int index, T element)
int indexOf(Object o)
int lastIndexOf(Object o)
• Indexing is NOT a feature of all collections
• It is a feature of the List ADT
9
ArrayList methods
• ArrayList is a class that implements the
methods of the List interface. Therefore, all
the these methods can be called on an
ArrayList object. Ex:
ArrayList<String> list = new ArrayList();
list.add(“ABC”);
list.add(“EFG”);
System.out.println(list.get(1));
System.out.println(list.indexOf(“ABC”));
System.out.println(list.indexOf(“HJK”));
ArrayList methods
• ArrayList is an actual class that
implements the methods of the List
interface. Therefore, all the these methods
can be called on an ArrayList object. Ex:
ArrayList<String> list = new ArrayList();
list.add(“ABC”);
list.add(“EFG”);
System.out.println(list.get(1));
System.out.println(list.indexOf(“ABC”));
System.out.println(list.indexOf(“HJK”));
The Collection Interface Hierarchy
<<interface>>
Iterable
<<interface>>
Collection
<<interface>>
List
<<interface>>
Set
<<interface>>
SortedSet
<<interface>>
Queue
12
Iterating over a Collection
• Many times, we need to write code that
retrieves all the elements of a collection one
at a time in order to process them.
• We call this iterating over the collection.
• Java library has a way to conveniently
accomplish the process of accessing (visiting
or retrieving) each element of a collection
once.
• The core of this approach is based on two
13
interfaces:
Iterator<T>
• An iterator over a collection allows
programs to conveniently access each
element of a collection once and only once
without having to keep track of anything
related to the process of iteration (visiting
of each element) [an example of use of
encapsulation].
• Methods of Iterator<T> interface:
– boolean hasNext()
– T next()
Iterator Interface
• We don't create an object of type iterator
by itself, but we ask the collection object to
return us one:
ArrayList<Book> shelf = new ArrayList<Book>();
…
Iterator<Book> iter = shelf.iterator();
while(iter.hasNext()){
Book book = iter.next();
System.out.println(book.toString());
} (use simple for loop)
Iterable<T> Interface
• An object of type Iterable allows you obtain an
Iterator object to retrieve its elements. It has
only one method:
Iterator<T> iterator() returns an Iterator
object to access to the elements of this Iterable
group of objects.
• Collection interface extends the Iterable
interface:
Collection<T> extends
Iterable<T>
(which is another
16
Iterable Objects and Iterators
• Classes in the Java standard class library
that implement the Collection interface are
Iterable OR you can implement Iterable in
a class that you define.
• If bookList is an object of an Iterable
class that contains Book objects, we can
retrieve all the available Book objects in
either of two ways:
17
Iterable Objects and Loops
• We can obtain an Iterator object from an
Iterable object and use it to retrieve all the
items from the Iterable object indirectly:
Iterator itr = bookList.iterator();
while (itr.hasNext())
System.out.println (itr.next());
• The Java 5.0 for-each loop simplifies the
repetitive processing of the items available
from an Iterable object
for (Book myBook : bookList)
System.out.println (myBook);
18
Iterators and Loops
• If bookList is an object of an Iterator
class that contains Book objects, you can
access all the available objects directly:
while (bookList.hasNext())
System.out.println (bookList.next());
• You can not use a “for-each” loop on an
object of a class that only implements
Iterator() method but does not implement
Iterable.
19
Download