Title: Java Collections
1Java Collections
2Lecture Objectives
- To understand the concepts of Java collections
- To be able to implement Java programs based on
Collections
3Java Collections
- A Java collection is any class that holds objects
and implements the Collection interface - For example, the ArrayListltTgt class is a Java
collection class, and implements all the methods
in the Collection interface - Collections are used along with iterators
- The Collection interface is the highest level of
Java's framework for collection classes - All of the collection classes discussed here can
be found in package java.util
4The Collection Landscape
5Wildcards
- Classes and interfaces in the collection
framework can have parameter type specifications
that do not fully specify the type plugged in for
the type parameter - Because they specify a wide range of argument
types, they are known as wildcards - public void method(String arg1, ArrayListlt?gt
arg2) - In the above example, the first argument is of
type String, while the second argument can be an
ArrayListltTgt with any base type
6Wildcards (Contd)
- A bound can be placed on a wildcard specifying
that the type used must be an ancestor type or
descendent type of some class or interface - The notation lt? extends Stringgt specifies that
the argument plugged in be an object of any
descendent class of String - The notation lt? super Stringgt specifies that the
argument plugged in be an object of any ancestor
class of String
7The Collection Framework
- The CollectionltTgt interface describes the basic
operations that all collection classes should
implement - The method headings for these operations are
shown on the next several slides - Since an interface is a type, any method can be
defined with a parameter of type CollectionltTgt - That parameter can be filled with an argument
that is an object of any class in the collection
framework
8Method Headings in the CollectionltTgt Interface
9Method Headings in the CollectionltTgt Interface
(Contd)
10Method Headings in the CollectionltTgt Interface
(Contd)
11Method Headings in the CollectionltTgt Interface
(Contd)
12Method Headings in the CollectionltTgt Interface
(Contd)
13Method Headings in the CollectionltTgt Interface
(Contd)
14Method Headings in the CollectionltTgt Interface
(Contd)
15Method Headings in the CollectionltTgt Interface
(Contd)
16Method Headings in the CollectionltTgt Interface
(Contd)
17Method Headings in the CollectionltTgt Interface
(Contd)
18Collection Relationships
- There are a number of different predefined
classes that implement the CollectionltTgt
interface - Programmer defined classes can implement it also
- A method written to manipulate a parameter of
type CollectionltTgt will work for all of these
classes, either singly or intermixed - There are two main interfaces that extend the
CollectionltTgt interface The SetltTgt interface
and the ListltTgt interface
19Collection Relationships (Contd)
- Classes that implement the SetltTgt interface do
not allow an element in the class to occur more
than once - The SetltTgt interface has the same method headings
as the CollectionltTgt interface, but in some cases
the semantics (intended meanings) are different - Methods that are optional in the CollectionltTgt
interface are required in the SetltTgt interface
20Collection Relationships (Contd)
- Classes that implement the ListltTgt interface have
their elements ordered as on a list - Elements are indexed starting with zero
- A class that implements the ListltTgt interface
allows elements to occur more than once - The ListltTgt interface has more method headings
than the CollectionltTgt interface - Some of the methods inherited from the
CollectionltTgt interface have different semantics
in the ListltTgt interface - The ArrayListltTgt class implements the ListltTgt
interface
21Methods in the SetltTgt Interface
22Methods in the SetltTgt Interface (Contd)
23Methods in the SetltTgt Interface (Contd)
24Methods in the SetltTgt Interface (Contd)
25Methods in the SetltTgt Interface (Contd)
26Methods in the SetltTgt Interface (Contd)
27Methods in the SetltTgt Interface (Contd)
28Methods in the SetltTgt Interface (Contd)
29Methods in the SetltTgt Interface (Contd)
30Methods in the SetltTgt Interface (Contd)
31Methods in the ListltTgt Interface
32Methods in the ListltTgt Interface (Contd)
33Methods in the ListltTgt Interface (Contd)
34Methods in the ListltTgt Interface (Contd)
35Methods in the ListltTgt Interface (Contd)
36Methods in the ListltTgt Interface (Contd)
37Methods in the ListltTgt Interface (Contd)
38Methods in the ListltTgt Interface (Contd)
39Methods in the ListltTgt Interface (Contd)
40Methods in the ListltTgt Interface (Contd)
41Methods in the ListltTgt Interface (Contd)
42Methods in the ListltTgt Interface (Contd)
43Methods in the ListltTgt Interface (Contd)
44Methods in the ListltTgt Interface (Contd)
45Methods in the ListltTgt Interface (Contd)
46Pitfall Optional Operations
- When an interface lists a method as "optional,"
it must still be implemented in a class that
implements the interface - The optional part means that it is permitted to
write a method that does not completely implement
its intended semantics - However, if a trivial implementation is given,
then the method body should throw an
UnsupportedOperationException
47Tip Dealing with All Those Exceptions
- The tables of methods for the various collection
interfaces and classes indicate that certain
exceptions are thrown - These are unchecked exceptions, so they are
useful for debugging, but need not be declared or
caught - In an existing collection class, they can be
viewed as run-time error messages - In a derived class of some other collection
class, most or all of them will be inherited - In a collection class defined from scratch, if it
is to implement a collection interface, then it
should throw the exceptions that are specified in
the interface
48Concrete Collections Classes
- The concrete class HashSetltTgt implements the
SetltTgt interface, and can be used if additional
methods are not needed - The HashSetltTgt class implements all the methods
in the SetltTgt interface, and adds only
constructors - The HashSetltTgt class is implemented using a hash
table - The ArrayListltTgt and VectorltTgt classes implement
the ListltTgt interface, and can be used if
additional methods are not needed - Both the ArrayListltTgt and VectorltTgt interfaces
implement all the methods in the interface
ListltTgt - Either class can be used when a ListltTgt with
efficient random access to elements is needed
49Concrete Collections Classes (Contd)
- The concrete class LinkedListltTgt is a concrete
derived class of the abstract class
AbstractSequentialListltTgt - When efficient sequential movement through a list
is needed, the LinkedListltTgt class should be used - The interface SortedSetltTgt and the concrete class
TreeSetltTgt are designed for implementations of
the SetltTgt interface that provide for rapid
retrieval of elements - The implementation of the class is similar to a
binary tree, but with ways to do inserting that
keep the tree balanced
50Methods in the HashSetltTgt Class
51Methods in the HashSetltTgt Class (Contd)