+ All Categories
Home > Documents > Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type...

Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type...

Date post: 16-Jan-2016
Category:
Upload: derek-moore
View: 217 times
Download: 0 times
Share this document with a friend
Popular Tags:
39
Generics and Collections
Transcript
Page 1: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Generics and Collections

Page 2: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Introduction

Generics• New feature of J2SE 5.0

• Provide compile-time type safety• Catch invalid types at compile time

• Generic methods• A single method declaration

• A set of related methods

• Generic classes• A single class declaration

• A set of related clases

Page 3: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Motivation for Generic Methods

Overloaded methods• Perform similar operations on different types

of data

• Overloaded printArray methods•Integer array

•Double array

•Character array

• Only reference types can be used with generic methods and classes

Page 4: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Motivation for Generic Methods (Cont.)

Study each printArray method• Array element type appears in two location

• Method header

•for statement

• Combine three printArray methods into one

• Replace the element types with a generic name E

• Declare one printArray method• Display the string representation of the elements of any

array

Page 5: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Generic Methods: Implementation and Compile-Time Translation

Generic method declaration• Type parameter section

• Delimited by angle brackets ( < and > )

• Precede the method’s return type

• Contain one or more type parameters

• Also called formal type paramters

Page 6: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Generic Methods: Implementation and Compile-Time Translation

Type parameter (Also known as type variable)• An identifier that specifies a generic type name

• Used to declare return type, parameter types and local variable types

• Act as placeholders for the types of the argument passed to the generic method

• Actual type arguments

• Can be declared only once but can appear more than once

public static < E > void printTwoArrays( E[] array1, E[] array2 )

Page 7: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Generic Methods: Implementation and Compile-Time Translation (Cont.)

Compile-time translation• Erasure

• Remove type parameter section

• Replace type parameters with actual types

• Default type is Object

Page 8: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Additional Compile-Time Translation Issues: Methods That Use a Type Parameter as the Return Type

Application of Fig. 18.5

• Generic method

• Use Type parameters in the return type and parameter list Generic interface

• Specify, with a single interface declaration, a set of related types

• E.g., Comparable< T >• Method integer1.compareTo( integer2 )

• Compare two objects of the same class

• Return 0 if two objects are equal

• Return -1 if integer1 is less than integer2

• Return 1 if integer1 is greater than integer2

Page 9: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Additional Compile-Time Translation Issues: Methods That Use a Type Parameter as the Return Type (Cont.)

Upper bound of type parameter• Default is Object

• Always use keyword extends• E.g., T extends Comparable< T >

• When compiler translates generic method to Java bytecode• Replaces type parameter with its upper bound

• Insert explicit cast operation

e.g., line 23 of Fig. 18.5 I preceded by an Integer cast

(Integer) maximum( 3, 4, 5 )

Page 10: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Overloading Generic Method

Generic method may be overloaded• By another generic method

• Same method name but different method parameters

• By non-generic methods• Same method name and number of parameters

When compiler encounters a method call• Search for most precise matching method first

• Exact method name and argument types

• Then search for inexact but applicable matching method

Page 11: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Generic Classes

Generic classes• Use a simple, concise notation to indicate the

actual type(s)

• At compilation time, Java compiler • ensures the type safety

• uses the erasure technique to enable client code to interact with the generic class

Parameterized classes• Also called parameterized types

• E.g., Stack< Double >

Page 12: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Generic Classes (Cont.)

Generic class declaration• Looks like a non-generic class declaration

• Except class name is followed by a type parameter section

The –Xlint:unchecked option• Compiler cannot 100% ensure type safety

Page 13: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Generic Classes (Cont.)

Generic class at compilation time• Compiler performs erasure on class’s type

parameters

• Compiler replaces type parameters with their upper bound

Generic class test program at compilation time• Compiler performs type checking

• Compiler inserts cast operations as necessary

Page 14: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Generic Classes (Cont.)

Creating generic methods to test class Stack< E >• Method testPush

• Perform same tasks as testPushDouble and testPushInteger

• Method testPop• Perform same tasks as testPopDouble and testPopInteger

Page 15: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Wildcards in Methods That Accept Type Parameters

Data structure ArrayList• Dynamically resizable, array-like data

structure

• Method add

• Method toString

Page 16: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Wildcards in Methods That Accept Type Parameters

Motivation for using wildcards• Implement a generic method sum

• Total the numbers in a collection

• Receive a parameter of type ArrayList< Number >

• Use method doubleValue of class Number to obtain the Number’s underlying primitive value as a double value

Page 17: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Wildcards in Methods That Accept Type Parameters (Cont.)

Implementing method sum with a wildcard type argument in its parameter•Number is the superclass of Integer

•ArrayList< Number > is not a supertype of ArrayList< Integer >

• Cannot pass ArrayList< Integer > to method sum

Page 18: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Generics and Inheritance: Notes Inheritance in generics

• Generic class can be derived from non-generic class

e.g., class Object is superclass of every generic class

• Generic class can be derived from another generic class

e.g., Stack is a subclass of Vector

• Non-generic class can be derived from generic class

e.g., Properties is a subclass of Hashtable

• Generic method in subclass can override generic method in superclass

• If both methods have the same signature

Page 19: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Collections

Page 20: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Introduction

Java collections framework• Contain prepackaged data structures,

interfaces, algorithms

• Use generics

• Use existing data structures• Example of code reuse

• Provides reusable components

Page 21: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Collections Overview

Collection• Data structure (object) that can hold references

to other objects

Collections framework• Interfaces declare operations for various

collection types

• Provide high-performance, high-quality implementations of common data structures

• Enable software reuse

Page 22: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Some collection framework interfaces.

Interface Description

Collection The root interface in the collections hierarchy from which interfaces Set, Queue and List are derived.

Set A collection that does not contain duplicates. List An ordered collection that can contain duplicate elements. Map Associates keys to values and cannot contain duplicate keys. Queue Typically a first-in, first-out collection that models a waiting line; other

orders can be specified.

Page 23: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Class Arrays

Class Arrays• Provides static methods for manipulating

arrays

• Provides “high-level” methods• Method binarySearch for searching sorted

arrays

• Method equals for comparing arrays

• Method fill for placing values into arrays

• Method sort for sorting arrays

Page 24: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Interface Collection and Class Collections

Interface Collection• Root interface in the collection hierarchy

• Interfaces Set, Queue, List extend interface Collection•Set – collection does not contain duplicates

•Queue – collection represents a waiting line

•List – ordered collection can contain duplicate elements

• Contains bulk operations• Adding, clearing, comparing and retaining objects

• Provide method to return an Iterator object• Walk through collection and remove elements from collection

Page 25: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Interface Collection and Class Collections (Cont.)

Class Collections• Provides static methods that manipulate

collections• Implement algorithms for searching, sorting and so

on

• Collections can be manipulated polymorphically

Synchronized collection Unmodifiable collection

Page 26: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Software Engineering Observation

The collections framework algorithms are polymorphic. That is, each algorithm can operate on objects that implement specific interfaces, regardless of the underlying implementations.

Page 27: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Lists

List• Ordered Collection that can contain

duplicate elements

• Sometimes called a sequence

• Implemented via interface List

•ArrayList•LinkedList•Vector

Page 28: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Performance Tip

ArrayLists behave like Vectors without synchronization and therefore execute faster than Vectors because ArrayLists do not have the overhead of thread synchronization.

Page 29: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Software Engineering Observation

LinkedLists can be used to create stacks, queues, trees and deques (double-ended queues, pronounced “decks”). The collections framework provides implementations of some of these data structures.

Page 30: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

ArrayList and Iterator

ArrayList example• Demonstrate Collection interface capabilities

• Place two String arrays in ArrayLists

• Use Iterator to remove elements in ArrayList

Page 31: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

LinkedList

LinkedList example• Add elements of one List to the other

• Convert Strings to uppercase

• Delete a range of elements

Page 32: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Linkedlist (Cont.)

static method asList of class Arrays• View an array as a List collection

• Allow programmer to manipulate the array as if it were a list

• Any modification made through the List view change the array

• Any modification made to the array change the List view

• Only operation permitted on the view returned by asList is set

Page 33: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Vector

Class Vector• Array-like data structures that can resize

themselves dynamically

• Contains a capacity

• Grows by capacity increment if it requires additional space

Page 34: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Performance Tip

Inserting an element into a Vector whose current size is less than its capacity is a relatively fast operation.

Inserting an element into a Vector that needs to grow larger to accommodate the new element is a relatively slow operation.

Page 35: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Collections Algorithms

Collections framework provides set of algorithms• Implemented as static methods•List algorithms

•sort•binarySearch•reverse•shuffle•fill•copy

Page 36: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Collections Algorithms

•Collection algorithms

•min•max•addAll•frequency•disjoint

Page 37: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Collections algorithms. Algorithm Description

sort Sorts the elements of a List.

binarySearch Locates an object in a List.

reverse Reverses the elements of a List.

shuffle Randomly orders a List’s elements.

fill Sets every List element to refer to a specified object.

Copy Copies references from one List into another.

min Returns the smallest element in a Collection.

max Returns the largest element in a Collection.

addAll Appends all elements in an array to a collection.

frequency Calculates how many elements in the collection are equal to the specified element.

disjoint Determines whether two collections have no elements in common.

Page 38: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Algorithm sort sort

• Sorts List elements• Order is determined by natural order of elements’ type

•List elements must implement the Comparable interface

• Or, pass a Comparator to method sort

Sorting in ascending order

• Collections method sort Sorting in descending order

• Collections static method reverseOrder Sorting with a Comparator

• Create a custom Comparator class

Page 39: Generics and Collections. Introduction Generics New feature of J2SE 5.0 Provide compile-time type safety Catch invalid types at compile time Generic methods.

Algorithm binarySearch

binarySearch• Locates object in List

• Returns index of object in List if object exists

• Returns negative value if Object does not exist

• Calculate insertion point

• Make the insertion point sign negative

• Subtract 1 from insertion point


Recommended