Upload
annice-wiggins
View
217
Download
2
Embed Size (px)
Citation preview
COMP 121
Week 8: Generic Collections
Objectives To understand type variables and how they are
used in generic programming To be able to implement and use generic classes
and methods To introduce generic collections and the Java
Collection hierarchy
Type Variables Generic programming: creation of programming
constructs that can be used with many different types In Java, achieved with inheritance or with type variables
For example: Type variables: Java's ArrayList (e.g. ArrayList<String>) Inheritance: Using Object to enable a data structure to store
any type of object A Generic class is declared with a type variable
In an ArrayList, the type variable denotes the element type
Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.
public class ArrayList<E> { public ArrayList() { . . . } public void add(E element) { . . . } . . . }
Type Variables (cont’d) Must be instantiated
The actual type must be supplied when you use the generic class
Can be instantiated with class or interface types ArrayList<BankAccount>ArrayList<Measurable>
Cannot use a primitive type as a type variable ArrayList<double> // Wrong!
Use corresponding wrapper class instead ArrayList<Double>
Supplied type replaces type variable in class interface Type variables make generic code safer and easier to
read
Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.
Instantiating a Generic Class
GenericClassName<Type1, Type2, . . .>
Example:
ArrayList<BankAccount>HashMap<String, Integer>
Purpose:To supply specific types for the type variables of a generic class.
Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.
Generic Methods
Generic method: a method with a type variable Can be defined inside ordinary and generic
classes The type variables of a generic method
are specified between the modifiers and the method return type
No need to instantiate the type variables
Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.
Generic Methods (cont’d) Non-generic method to print all the String
elements in an arraypublic static void print(String[] a) { for (String e : a) System.out.print(e + " "); System.out.println(); }
Generic method to print all the elements in an array
public static <E> void print(E[] a) { for (E e : a) System.out.print(e + " "); System.out.println(); }
Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.
Conventions for Type Variable Names
Type Variable Name Meaning
E Element type in a collection
K Key type in a map
V Value type in a map
T General type
S, U Additional general types
Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.
Generic Collections Generics allow you to define a collection that
contains references to objects of a specific type ArrayList<String> myList = new ArrayList<String>();
specifies that myList is a List of String where String is a type parameter
Only references to objects of type String can be stored in myList, and all items retrieved would be of type String
A type parameter is analogous to a method parameter
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.
Creating a Generic Collection
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.
The Collection Hierarchy
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.
Common Features of Collections Collection interface specifies a set of common
methods Fundamental features include:
Collections grow as needed Collections hold references to objects that can be
accessed using an Iterator object Collections have at least two constructors (one to
create an empty collection and one to make a copy of an existing collection)
Collections override equals, hashCode, and toString (inherited from Object) in a reasonable way that includes the elements they contain
Collections are considered “unordered,” meaning that there is no guarantee about where in a collection an added element will be placed
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.
Some Collection Methods
Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.
Summary In Java, generic programming can be
achieved with inheritance or with type variables
A generic class has one or more type variables
Type variables can be instantiated with class or interface types
Type variables make generic code safer and easier to read
Type variables of a generic class follow the class name and are enclosed in angle brackets
Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.
Summary (continued) Type variables can be used for fields, method
parameters, and return values Type variables of a generic method are
specified between the modifiers and the return type
Type variables do not need to be instantiated when calling a generic method
Generics are used in the Java Collection framework to define a collection that contains references to objects of a specific type
Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.
Any Questions?