cop 3503 fall 2012 shayan javed lecture 8

Post on 22-Feb-2016

33 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

COP 3503 FALL 2012 Shayan Javed Lecture 8. Programming Fundamentals using Java. ArrayList and Java Generics. Collection. A container object that groups multiple objects. Collection. A container object that groups multiple objects Example: Arrays. Collection. - PowerPoint PPT Presentation

TRANSCRIPT

1 / 831

COP 3503 FALL 2012SHAYAN JAVED

LECTURE 8

Programming Fundamentals using Java

2 / 83

ArrayList and Java Generics

3 / 83

Collection

A container object that groups multiple objects

4 / 83

Collection

A container object that groups multiple objects Example: Arrays

5 / 83

Collection

A container object that groups multiple objects Example: Arrays

Java provides multiple classes/interfaces in the Java Collection Framework

6 / 83

Collection

A container object that groups multiple objects Example: Arrays

Java provides multiple classes/interfaces in the Java Collection Framework Going to look at ArrayList

7 / 83

Arrays

Hold several elements (primitives/objects) of the same type

8 / 83

Arrays

Hold several elements (primitives/objects) of the same type

Size = static. Once set, cannot be changed

9 / 83

Arrays

Advantages: Easy to access elements directly

10 / 83

Arrays

Advantages: Easy to access elements directly Easy to traverse

11 / 83

Arrays

Advantages: Easy to access elements directly Easy to traverse

Disadvantages: Have to decide on size before creating

12 / 83

Arrays

Advantages: Easy to access elements directly Easy to traverse

Disadvantages: Have to decide on size before creating Inserting/removing elements is troublesome

Shifting elements

13 / 83

ArrayList (java.util.ArrayList)

Holds several objects in order (like Arrays)

14 / 83

ArrayList (java.util.ArrayList)

Holds several objects in order (like Arrays)

Unlike Arrays: Size does not need to be specified at creation time

15 / 83

ArrayList (java.util.ArrayList)

Holds several objects in order (like Arrays)

Unlike Arrays: Size does not need to be specified at creation time Grows in size as items added

16 / 83

ArrayList (java.util.ArrayList)

Holds several objects in order (like Arrays)

Unlike Arrays: Size does not need to be specified at creation time Grows in size as items added

Provides useful methods for manipulating the list

17 / 83

ArrayList (java.util.ArrayList)

Constructors: new ArrayList( ) - no need to pass in size (10)

18 / 83

ArrayList (java.util.ArrayList)

Constructors: new ArrayList( ) - no need to pass in size (10) new ArrayList(int) - initial capacity

19 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list

20 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index

21 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index void clear(): Removes all elements

22 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index void clear(): Removes all elements boolean contains(Object o): Returns true if object is in the list

23 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index void clear(): Removes all elements boolean contains(Object o): Returns true if object is in the list Object get(int index): Returns object at the index

24 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index void clear(): Removes all elements boolean contains(Object o): Returns true if object is in the list Object get(int index): Returns object at the index boolean remove(Object o): Removes the object from the list

25 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index void clear(): Removes all elements boolean contains(Object o): Returns true if object is in the list Object get(int index): Returns object at the index boolean remove(Object o): Removes the object from the list Object remove(int index): Removes the object at the index

26 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index void clear(): Removes all elements boolean contains(Object o): Returns true if object is in the list Object get(int index): Returns object at the index boolean remove(Object o): Removes the object from the list Object remove(int index): Removes the object at the index int size(): Returns the no. of elements in

the list

27 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index void clear(): Removes all elements boolean contains(Object o): Returns true if object is in the list Object get(int index): Returns object at the index boolean remove(Object o): Removes the object from the list Object remove(int index): Removes the object at the index int size(): Returns the no. of elements in

the list int indexOf(Object o): Returns index of first matching element

28 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index void clear(): Removes all elements boolean contains(Object o): Returns true if object is in the list Object get(int index): Returns object at the index boolean remove(Object o): Removes the object from the list Object remove(int index): Removes the object at the index int size(): Returns the no. of elements in

the list int indexOf(Object o): Returns index of first matching element Object set(int index, Object o): Sets the object at the index

29 / 83

ArrayList (java.util.ArrayList)

Methods: boolean add(Object o): Appends object at the end of the list void add(int index, Object o): Inserts object at specified index void clear(): Removes all elements boolean contains(Object o): Returns true if object is in the list Object get(int index): Returns object at the index boolean remove(Object o): Removes the object from the list Object remove(int index): Removes the object at the index int size(): Returns the no. of elements in

the list int indexOf(Object o): Returns index of first matching element Object set(int index, Object o): Sets the object at the index Object clone(): Returns a shallow copy

30 / 83

ArrayList Example

import java.util.ArrayList;

31 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList numbers = new ArrayList(); // no size specified initially

32 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList numbers = new ArrayList(); // no size specified initially

numbers.add(new Integer(10));

33 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList numbers = new ArrayList(); // no size specified initially

numbers.add(new Integer(10));numbers.add(3); /* auto-boxing: converted to numbers.add(new

Integer(3)); */

34 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList numbers = new ArrayList(); // no size specified initially

numbers.add(new Integer(10));numbers.add(3); /* auto-boxing: converted to numbers.add(new

Integer(3)); */

int sum = 0; // sum up all the numbers in the list

int number = 0;

35 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList numbers = new ArrayList(); // no size specified initially

numbers.add(new Integer(10));numbers.add(3); /* auto-boxing: converted to numbers.add(new

Integer(3)); */

int sum = 0; // sum up all the numbers in the list

int number = 0;for(int i = 0; i < numbers.size(); i++) {

}

36 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList numbers = new ArrayList(); // no size specified initially

numbers.add(new Integer(10));numbers.add(3); /* auto-boxing: converted to numbers.add(new

Integer(3)); */

int sum = 0; // sum up all the numbers in the list

int number = 0;for(int i = 0; i < numbers.size(); i++) {

number = (Integer)numbers.get(i); // cast required – why?

}

37 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList numbers = new ArrayList(); // no size specified initially

numbers.add(new Integer(10));numbers.add(3); /* auto-boxing: converted to numbers.add(new

Integer(3)); */

int sum = 0; // sum up all the numbers in the list

int number = 0;for(int i = 0; i < numbers.size(); i++) {

number = (Integer)numbers.get(i); // cast required – why?sum += number; // auto un-boxing: Integer converted to int

}

38 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList numbers = new ArrayList(); // no size specified initially

numbers.add(new Integer(10));numbers.add(3); /* auto-boxing: converted to numbers.add(new

Integer(3)); */numbers.add(“A String”); // will compile!int sum = 0; // sum up all the numbers in

the listint number = 0;for(int i = 0; i < numbers.size(); i++) {

number = (Integer)numbers.get(i); // cast required – why?sum += number; // auto un-boxing: Integer converted to int

}

39 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList numbers = new ArrayList(); // no size specified initially

numbers.add(new Integer(10));numbers.add(3); /* auto-boxing: converted to numbers.add(new

Integer(3)); */numbers.add(“A String”); // will compile!int sum = 0; // sum up all the numbers in

the listint number = 0;for(int i = 0; i < numbers.size(); i++) {

number = (Integer)numbers.get(i); // run-time error when i = 2sum += number; // auto un-boxing: Integer converted to int

}

40 / 83

ArrayList

How do we make sure we are dealing withobjects of only one type?

41 / 83

ArrayList

How do we make sure we are dealing withobjects of only one type?

Solution: Java Generics

42 / 83

Java Generics

Generics is the capability to parameterize types

43 / 83

Java Generics

Generics is the capability to parameterize types

Can define class/interface/method with generic types – compiler replaces with concrete types.

44 / 83

Java Generics

Generics is the capability to parameterize types

Can define class/interface/method with generic types – compiler replaces with concrete types.

Introduced in JDK 1.5

45 / 83

java.util.ArrayList<E>

Methods: boolean add(E o): Appends object at the end of the

list void add(int index, E o): Inserts object at specified index void clear(): Removes all elements boolean contains(E o): Returns true if object is in the list E get(int index): Returns object at the index boolean remove(E o): Removes the object from the list E remove(int index): Removes the object at the index int size(): Returns the no. of elements in

the list int indexOf(E o): Returns index of first matching element E set(int index, E o): Sets the object at the index E clone(): Returns a shallow copy

46 / 83

Java Generics

Type of objects it can hold is specified at declaration

47 / 83

Java Generics

Type of objects it can hold is specified at declaration

// will only hold Integer objectsArrayList<Integer> numbers = new

ArrayList<Integer>();

48 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList<Integer> numbers = new ArrayList<Integer>();

numbers.add(new Integer(10));numbers.add(3); /* auto-boxing: */numbers.add(“A String”); // WON’T COMPILE!

int sum = 0; // sum up all the numbers in the list

int number = 0;for(int i = 0; i < numbers.size(); i++) {

number = (Integer)numbers.get(i); // cast NOT required – why?sum += number; // auto un-boxing: Integer converted to int

}

49 / 83

ArrayList Example

import java.util.ArrayList;

ArrayList<Integer> numbers = new ArrayList<Integer>();

numbers.add(new Integer(10));numbers.add(3); /* auto-boxing: */numbers.add(“A String”); // WON’T COMPILE!

int sum = 0; // sum up all the numbers in the list

int number = 0;for(int i = 0; i < numbers.size(); i++) {

number = numbers.get(i); // cast NOT required – why?sum += number; // auto un-boxing: Integer converted to int

}

50 / 83

Java Generics

More strictness

51 / 83

Java Generics

More strictness Fewer errors

52 / 83

Generic Classes

public class AClass<E> {// properties and methods can use the “E” type

}

53 / 83

Generic Classes

public class AClass<E> {// properties and methods can use the “E” typeArrayList<E> numbers = new ArrayList<E>();

}

54 / 83

Generic Methods

public class GenericMethodDemo { public static void main(String[] args ) {

Integer[] integers = {1, 2, 3, 4, 5}; String[] strings = {"London", "Paris", "New York”};

}

55 / 83

Generic Methods

public class GenericMethodDemo { public static void main(String[] args ) {

Integer[] integers = {1, 2, 3, 4, 5}; String[] strings = {"London", "Paris", "New York”};

}

public static <E> void print(E[] list) { for (int i = 0; i < list.length; i++)

System.out.print(list[i] + " "); System.out.println(); }

}

56 / 83

Generic Methods

public class GenericMethodDemo { public static void main(String[] args ) {

Integer[] integers = {1, 2, 3, 4, 5}; String[] strings = {"London", "Paris", "New York”};

GenericMethodDemo.<Integer>print(integers); GenericMethodDemo.<String>print(strings);

}

public static <E> void print(E[] list) { for (int i = 0; i < list.length; i++)

System.out.print(list[i] + " "); System.out.println(); }

}

57 / 83

Generic Interfaces

public interface AnInterface<E> {// properties and methods can use the “E” type

public void aMethod(E object);}

58 / 83

Generic Interfaces

public interface Comparable<E> {

public int compareTo(E object);

}

59 / 83

Generic Interfaces

public interface Comparable<E> {

public int compareTo(E object);

}

public interface Comparator<E> {

public int compare(E object1, E object2);

}

60 / 83

Generic Interfaces

public Book implements Comparable{

// comparison based on pricepublic int compareTo(Object o) {Book b = (Book)o;if (price > b.getPrice())return 1;else if (price < b.getPrice())return -1;elsereturn 0;}

}

61 / 83

Generic Interfaces

public Book implements Comparable{

// comparison based on pricepublic int compareTo(Object o) {Book b = (Book)o;if (price > b.getPrice())return 1;else if (price < b.getPrice())return -1;elsereturn 0;}

} HOW WOULD YOU USE JAVA GENERICS?

62 / 83

Generic Interfaces

public Book implements Comparable<Book>{

// comparison based on pricepublic int compareTo(Book b) {Book b = (Book)o;if (price > b.getPrice())return 1;else if (price < b.getPrice())return -1;elsereturn 0;}

}

63 / 83

Generic Interfaces

public Book implements Comparable<Book>{

// comparison based on pricepublic int compareTo(Book b) {Book b = (Book)o; // no more casting!if (price > b.getPrice())return 1;else if (price < b.getPrice())return -1;elsereturn 0;}

}

64 / 83

Generic Interfaces

public Book implements Comparable<Book>{

// comparison based on pricepublic int compareTo(Book b) {Book b = (Book)o; // no more casting!if (price > b.getPrice())return 1;else if (price < b.getPrice())return -1;elsereturn 0;}

}

65 / 83

Generic Interfaces

public class ReviewComparison implements Comparator {public int compare (Object o1, Object o2) {

Book b1 = (Book)o1;Book b2 = (Book)o2;if (b1.getACR() > b2.getACR())

return 1;if (b1.getACR() < b2.getACR())

return -1;else

return 0;}

}

66 / 83

Generic Interfaces

public class ReviewComparison implements Comparator<Book> {public int compare (Book b1, Book b2) {Book b1 = (Book)o1;Book b2 = (Book)o2;if (b1.getACR() > b2.getACR())return 1;if (b1.getACR() < b2.getACR())return -1;elsereturn 0;}

}

67 / 83

Generic Interfaces

public class ReviewComparison implements Comparator<Book> {public int compare (Book b1, Book b2) {Book b1 = (Book)o1;Book b2 = (Book)o2;if (b1.getACR() > b2.getACR())return 1;if (b1.getACR() < b2.getACR())return -1;elsereturn 0;}

}

68 / 83

Java Generics - Summary

Allows you to create a “general” template

Classes/methods/interfaces

Versatile and strict

69 / 83

Back to ArrayList...

How does it work “behind the scenes”?

70 / 83

Back to ArrayList...

How does it work “behind the scenes”?

Elements are stored inside an array private array

71 / 83

Back to ArrayList...

How does it work “behind the scenes”?

Elements are stored inside an array private array

Array has an initial capacity

72 / 83

Back to ArrayList...

How does it work “behind the scenes”?

Elements are stored inside an array private array

Array has an initial capacity Empty constructor [new ArrayList()]: capacity 10

73 / 83

Back to ArrayList...

How does it work “behind the scenes”?

Elements are stored inside an array private array

Array has an initial capacity Empty constructor [new ArrayList()]: capacity 10 Otherwise specify capacity [new ArrayList(capacity)]

74 / 83

ArrayList

When number of elements exceeds capacity (the add/insert method):

75 / 83

ArrayList

When number of elements exceeds capacity (the add/insert method): Internal array replaced by new one

76 / 83

ArrayList

When number of elements exceeds capacity (the add/insert method): Internal array replaced by new one Elements from the old array copied over

77 / 83

ArrayList

When number of elements exceeds capacity (the add/insert method): Internal array replaced by new one Elements from the old array copied over

Insert and remove require shifting of elements

78 / 83

ArrayList

When number of elements exceeds capacity (the add/insert method): Internal array replaced by new one Elements from the old array copied over

Insert and remove require shifting of elements (Recall add/remove in Project1)

79 / 83

Efficiency of ArrayLists

Reallocation of underlying array = when capacity reached and need to add more elements

80 / 83

Efficiency of ArrayLists

Reallocation of underlying array = when capacity reached and need to add more elements

Add/Insert/Remove = costly because requires shifting of elements in array

81 / 83

Efficiency of ArrayLists

Reallocation of underlying array = when capacity reached and need to add more elements

Add/Insert/Remove = costly because requires shifting of elements in array

Accessing element (get) = fast just like an array

82 / 83

Efficiency of ArrayLists

Reallocation of underlying array = when capacity reached and need to add more elements

Add/Insert/Remove = costly because requires shifting of elements in array

Accessing element (get) = fast just like an array

Problems overcome with Linked Lists.

83 / 83

Other Java Collections

LinkedList

Stack

Queue

Will look at these later

top related