+ All Categories
Home > Documents > Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Date post: 04-Jan-2016
Category:
Upload: dwight-owens
View: 221 times
Download: 0 times
Share this document with a friend
43
Programming With Java Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class
Transcript
Page 1: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

1

Chapter 14

Generics and The

ArrayList Class

Page 2: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

2

Part 1

The ArrayList Class

Page 3: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

3

The ArrayList Class

o ArrayList is a class in the standard Java libraries.

Unlike arrays, which have a fixed length once they

have been created, an ArrayList is an object that

can grow and shrink while your program is running.

o In general, an ArrayList serves the same purpose as an

array, except that an ArrayList can change length

while the program is running.

Page 4: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

4

ArrayLists Disadvantages

• An ArrayList is less efficient than an array.

• It does not have the convenient square bracket notation.

• The base type of an ArrayList must be a class type (or

other reference type): it cannot be a primitive type (int,

double, or char).

Page 5: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

5

Using the ArrayList Class

o In order to make use of the ArrayList class, it must first be imported from the package java.util.

o An ArrayList is created and named in the same way as object of any class, except that you specify the base type as follows:

ArrayList<BaseType> aList = new ArrayList<BaseType>();

o An initial capacity can be specified when creating an ArrayList as well.

e.g. The following code creates an ArrayList that stores objects of the base type String with an initial capacity of 20 items.

ArrayList<String> list = new ArrayList<String>(20);

Page 6: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

6

The ArrayList Methods

o The tools for manipulating arrays consist only of the

square brackets and the instance variable length.

o ArrayLists, however, come with a selection of powerful

methods that can do many of the things for which code

would have to be written in order to do them using arrays.

Page 7: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

7

The ArrayList Methods

Example:

ArrayList<Double> list1 = new ArrayList<Double>(30);

ArrayList<String> list2 = new ArrayList<String>();

Page 8: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

8

The ArrayList Methods

Example:

ArrayList<String> list = new ArrayList<String>();

int index = 2;

……

list.set(index, “Here”);

String S = list.get(index);

Page 9: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

9

The ArrayList Methods

Example:

ArrayList<String> list = new ArrayList<String>();

list.add(“Java”);

list.add(“Course”);

list.add(0,“Semester 081”);

Page 10: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

10

The ArrayList Methods

Page 11: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

11

The ArrayList Methods

Page 12: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

12

The ArrayList Methods

Page 13: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

13

The ArrayList Methods

Page 14: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

14

The ArrayList Methods

Page 15: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

15

The ArrayList Methods

Page 16: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

16

Why are Some Parameters of Type Base_Type and Others of type Object

o When looking at the methods available in the ArrayList class, there appears to be some inconsistency.

In some cases, when a parameter is naturally an object of the base type, the parameter type is the base type.

However, in other cases, it is the type Object.

o This is because the ArrayList class implements a number of interfaces, and inherits methods from various classes.

These interfaces and classes specify that certain parameters have type Object.

Page 17: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

17

For-each Loop for ArrayList Objects o The ArrayList class is an example of a collection class.

o Starting with version 5.0, Java has added a new kind of for loop

called a for-each or enhanced for loop.

This kind of loop has been designed to cycle through all the

elements in a collection (like an ArrayList).

Syntax:

for (Array_Base_Type Variable : ArrayList_Object)

Statement

Example:

ArrayList<Integer> list = new ArrayList<Integer>(10); for (Integer element : list)

element = 20 ;

Page 18: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

18

Use trimToSize to Save Memoryo An ArrayList automatically increases its capacity when

needed.

However, the capacity may increase beyond what a

program requires.

In addition, although an ArrayList grows

automatically when needed, it does not shrink

automatically.

o If an ArrayList has a large amount of excess capacity,

an invocation of the method trimToSize will shrink the

capacity of the ArrayList down to the size needed.

Page 19: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

19

Example (ArrayList class)import java.util.*;

class ArrayListDemo {

public static void main(String[] args) {

ArrayList<String> list = new ArrayList<String> (20);

list.add("AB") ; list.add("CD") ; list.add("GH") ;

list.add("IJ") ; list.add("KL") ; list.add("MN") ;

list.add("QR") ; list.add("ST") ; list.add("WX") ;

list.add("YZ") ;

// Print the elements of the ArrayList

System.out.println("The following is the initial ArrayList:");

for(String s : list)

System.out.print(s +" ");

// Add elements to the ArrayList

list.add(2 , "ef") ; list.add(7 , "op") ; list.add(10 , "uv") ;

// Print the new ArrayList

System.out.println(" ");

System.out.println("The following is the new ArrayList:");

for(String s : list)

System.out.print(s +" "); continued

Page 20: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

20

Example (ArrayList class)// Print the element at position index1 in the ArrayList System.out.println(" "); int index1=11; String element = list.get(index1) ; System.out.println("The element at position " +" " +index1 +" "

+"is" +" " +element); // Print the index of an element of the ArrayList System.out.println(" "); int index = list.indexOf("CD") ; System.out.println("The element CD is at position " +" “ +index);

}}

Output:The following is the initial ArrayList:AB CD GH IJ KL MN QR ST WX YZ The following is the new ArrayList:AB CD ef GH IJ KL MN op QR ST uv WX YZ The element at position 11 is WXThe element BC is at position 1

Page 21: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

21

Parameterized Classes and Generics

o The class ArrayList is a parameterized class.

o It has a parameter, denoted by Base_Type, that can be

replaced by any reference type to obtain a class for

ArrayLists with the specified base type.

o Starting with version 5.0, Java allows class definitions

with parameters for types.

These classes that have type parameters are called

parameterized class or generic definitions, or, simply,

generics.

Page 22: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

22

Part 2

Generics

Page 23: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

23

Generics

o Classes and methods can have a type parameter:

A type parameter can have any reference type (i.e.,

any class type) plugged in for the type parameter.

When a specific type is plugged in, this produces a

specific class type or method.

Traditionally, a single uppercase letter is used for a

type parameter, but any non-keyword identifier

may be used.

Page 24: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

24

Genericso A class definition with a type parameter is stored in a

file and compiled just like any other class.

o Once a parameterized class is compiled, it can be used

like any other class.

However, the class type plugged in for the type

parameter must be specified before it can be used in a

program.

Doing this is said to instantiate the generic class

Sample<String> object = new Sample<String>( );

Page 25: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

25

Example (Generics)public class Sample<T>{ private T data ; public void setData(T newData) {

data = newData ; } T is a parameter for a type public T getData( ) {

return data ; } }o The class Sample could be used as follows: Sample<String> object = new Sample<String>( ) ;

Object.setData(“Hello”) ;System.out.println(object.getData( ) ) ;

Page 26: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

26

Class Definition with a Type Parameter

o A class that is defined with a parameter for a type is

called a generic class or a parameterized class.

The type parameter is included in angular brackets

after the class name in the class definition heading.

Any non-keyword identifier can be used for the type

parameter, but by convention, the parameter starts with

an uppercase letter.

The type parameter can be used like other types used

in the definition of a class.

Page 27: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

27

Example (A Generic Class for Ordered Pairs)public class Pair<T>{ private T first; private T second;

public Pair() { first = null; second = null; }

public Pair(T firstItem, T secondItem) { first = firstItem; second = secondItem; }

public void setFirst(T newFirst) { first = newFirst; } public void setSecond(T newSecond) { second = newSecond; }

public T getFirst() { return first; }

public T getSecond() { return second; } }

Page 28: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

28

Example (A Generic Class for Ordered Pairs)public class GenericPairDemo { public static void main(String[] args) { Pair<String> secretPair = new Pair<String>("Happy", "Day");

Scanner obj = new Scanner(System.in); System.out.println("Enter two words:"); String word1 = obj.next(); String word2 = obj.next(); Pair<String> inputPair = new Pair<String>(word1, word2); if (word1 == secretPair.getFirst() && word2 == secretPair.getSecond()) { System.out.println("You guessed the secret words"); System.out.println("in the correct order!"); } else { System.out.println("You guessed incorrectly."); System.out.println("You guessed"); System.out.println(inputPair); System.out.println("The secret words are"); System.out.println(secretPair); } }}

Output:Enter two words:two wordsYou guessed incorrectly.You guessedfirst: twosecond: wordsThe secret words arefirst: Happysecond: Day

Page 29: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

29

A Generic Constructor Name Has No Type Parameter

o Although the class name in a parameterized class definition

has a type parameter attached, the type parameter is not used

in the heading of the constructor definition:

public Pair<T>() // Illegal

o A constructor can use the type parameter as the type for a

parameter of the constructor, but in this case, the angular

brackets are not used:

public Pair(T first, T second) // legal

o When a generic class is instantiated, the angular brackets are

used:

Pair<String> pair = new Pair<STring>("Happy", "Day");

Page 30: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

30

A Primitive Type Cannot be Plugged in for a Type Parameter

o The type plugged in for a type parameter must always

be a reference type.

It cannot be a primitive type such as int, double, or

char.

However, now that Java has automatic boxing, this is

not a big restriction.

Note: reference types can include arrays.

Page 31: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

31

A Type Parameter Cannot Be Used Everywhere a Type Name Can Be Used

o Within the definition of a parameterized class definition,

there are places where an ordinary class name would be

allowed, but a type parameter is not allowed.

o In particular, the type parameter cannot be used in

simple expressions using new to create a new object.

For instance, the type parameter cannot be used as a

constructor name or like a constructor:

T object = new T(); // the first T is legal

// the second one is illegal

T[] a = new T[10]; // the first T is legal

// the second one is illegal

Page 32: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

32

An Instantiation of a Generic Class Cannot be an Array Base Type

o Arrays such as the following are illegal:

Pair<String>[] a = new Pair<String>[10];

Although this is a reasonable thing to want to do, it is

not allowed given the way that Java implements generic

classes.

Page 33: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

33

A Class Definition Can Have More Than One Type Parameter

o A generic class definition can have any number of type

parameters.

Multiple type parameters are listed in angular brackets

just as in the single type parameter case, but are

separated by commas.

Page 34: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

34

Example (Using a Generic Class With two Type Parameters) public class Pair<T1 , T2>{ private T1 first; private T2 second;

public Pair() { first = null; second = null; }

public Pair(T1 firstItem, T2 secondItem) { first = firstItem; second = secondItem; }

public void setFirst(T1 newFirst) { first = newFirst; } public void setSecond(T2 newSecond) { second = newSecond; }

public T1 getFirst() { return first; }

public T2 getSecond() { return second; } }

Page 35: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

35

Example (A Generic Class for Ordered Pairs)public class GenericPairDemo2 { public static void main(String[] args) { Pair<String , Integer> Pair1 = new Pair<String , Integer>(“major2 Grade", 15);

Scanner obj = new Scanner(System.in); System.out.println("Enter your expected grade:"); int Grade = obj.nextInt(); Pair<String , Integer> Pair2 = new Pair<String , Integer>(“major2 Grade", Grade); if (Grade == Pair1.getSecond()) { System.out.println("You got the expected grade"); System.out.println("You got " +Pair1.getSecond() +" " +"out of 20"); } else { System.out.println("You did not get the expected grade"); System.out.println("You got " +Pair1.getSecond() +" " +"out of 20"); } }}

Output:Enter your expected grade:12You did not get the expected gradeYou got 15 out of 20

Page 36: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

36

A Generic Class Cannot Be an Exception Class

o It is not permitted to create a generic class with

Exception, Error, Throwable, or any descendent class

of Throwable.

A generic class cannot be created whose objects are

throwable

public class GEx<T> extends Exception // Illegal

The above example will generate a compiler error

message.

Page 37: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

37

Bounds For Type Parameterso Sometimes it makes sense to restrict the possible types

that can be plugged in for a type parameter T.

For instance, to ensure that only classes that

implement the Comparable interface are plugged in for

T, define a class as follows:

public class RClass<T extends Comparable>

"extends Comparable" serves as a bound on the

type parameter T.

Any attempt to plug in a type for T which does not

implement the Comparable interface will result in a

compiler error message.

Page 38: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

38

Bounds For Type Parameterso A bound on a type may be a class name (rather than an

interface name). Then only descendent classes of the bounding class may be plugged in for the type parameterspublic class ExClass<T extends Class1>

o A bounds expression may contain multiple interfaces and up to one class.o If there is more than one type parameter, the syntax is as follows:

public class Two<T1 extends Class1, T2 extends Class2 & Comparable>

Page 39: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

39

Example (Bounds For Type Parameters)public class Pair<T extends Comparable>{ private T first; private T second;

public T max() { if (first.compareTo(second) <= 0)

return first ; else

return second ; }

<All the constructors and methods given in the program page 27 are also included as part of this generic class definition>

Page 40: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

40

Generic Interfaces

o An interface can have one or more type parameters.

o The details and notation are the same as they are for

classes with type parameters.

Page 41: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

41

Generic Methodso When a generic class is defined, the type parameter can

be used in the definitions of the methods for that generic

class.

o In addition, a generic method can be defined that has its

own type parameter that is not the type parameter of any

class.

A generic method can be a member of an ordinary

class or a member of a generic class that has some other

type parameter.

The type parameter of a generic method is local to

that method, not to the class.

Page 42: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

42

Generic Methods

o The type parameter must be placed (in angular

brackets) after all the modifiers, and before the returned

type.

public static <T> T genMethod(T[] a)

o When one of these generic methods is invoked, the

method name is prefaced with the type to be plugged in,

enclosed in angular brackets.

String s = NonG.<String>genMethod(c);

Page 43: Programming With Java ICS201 1 Chapter 14 Generics and The ArrayList Class.

Pro

gra

mm

ing

Wit

h Java

Pro

gra

mm

ing

Wit

h Java

ICS

20

1

43

Inheritance With Generic Classes

o A generic class can be defined as a derived class of an

ordinary class or of another generic class.

As in ordinary classes, an object of the subclass type

would also be of the superclass type.

o Given two classes: A and B, and given G: a generic

class, there is no relationship between G<A> and G<B>

This is true regardless of the relationship between

class A and B, e.g., if class B is a subclass of class A


Recommended