Download ppt - Chapter 10

Transcript

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 1

Chapter 10

Using arrays to create collections

ArrayList class

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 2

Collections

• There are many examples of programs that need many objects of a particular type– A class roster needs many Student objects

– A CD object needs many songs

– A photo album needs many photos

• We can use arrays for this– How do we deal with the fact that we don't know ahead of

time how many objects there will be?

– Some kinds of collections change size frequently

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 3

What does a Collection class look like?

public class ItemCollection {

private Item [] collection;

private int size, capacity;

public ItemCollection() {…}

public void add( Item item) {…}

public Item get( int index) {…} …}

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 4

Dynamic Arrays

• Create the array with some standard sizeItem [] collection = new Item[capacity];

• Use a counter variable to keep track of the number of elements which are not null;

• Each time you add an item, put it in the next available element and increment the counter.collection[size] = newItem;

size++;

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 5

Dynamic Arrays

• Before adding a new item, check to see if there is room• If the array is full, make a bigger array and copy the

elements from the originalif (size == capacity)

Item [] newArray = new Item[2*capacity];

for (int i=0; i< size; i++)

newArray[i] = collection[i];

collection = newArray;

capacity *= 2; }

// add element as above

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 6

JCF Lists

• JCF includes two classes that support methods to maintain a collection of objects as a linear list

L = (l0, l1, l2, . . . , lN)

• We can add to, remove from, and retrieve objects in a given list.

• A list does not have a set limit to the number of objects we can add to it.

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 7

List Methods

• Here are five of the 25 list methods:

Returns the number of elements in the list

int size ( )

Removes the element at position idx

boolean remove ( int idx )

Returns the element at position idx

Object get ( int idx )

Clears this list, i.e., make the list empty

void clear ( )

Adds an object o to the list

boolean add ( Object o )

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 8

Using Lists

• To use a list in a program, we must create an instance of one of the List classes.– ArrayList

– LinkedList

• The ArrayList class uses an array to manage data.• The LinkedList class uses a technique called

linked-node representation.

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 9

Sample List Usage

• Here's an example of manipulating a list:import java.util.*;

ArrayList<Person> friends;

Person person;

friends = new ArrayList<Person>( );

person = new Person("jane", 10, 'F');

friends.add( person );

person = new Person("jack", 6, 'M');

friends.add( person );

Person p = friends.get( 1 );

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 10

How to process the elements of a list?

• Use a for loop

for (int i=0; i<list.size(); i++)

process( list.get(i));

• Use for in

for (BaseType element : list)

process( element);

• Use an iterator

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 11

Using an Iterator

• The iterator method of ArrayList returns an object you can use to loop through all the elements of the listIterator<Person> iter = friends.iterator();

while (iter.hasNext())

System.out.println( iter.next());

• The next() method returns each element in turnPerson p = iter.next();

• Use hasNext() to determine when all the elements of the list have been processed

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 12

Interfaces

• Sometimes we have a number of classes that should

have a common set of methods.

• All lists should have methods like add, get, size, …

• Interfaces provide a way to specify a set of methods

that a group of classes should have in common.• A Java interface defines only behavior

– It includes headers for public methods (no method bodies)

– It does not include any data members except public constants

– No instances of a Java interface can be created

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 13

Interfaces in Java

• The Java libraries include many interfaces

• There is a List interface that includes all the methods needed by

lists

• Both ArrayList and LinkedList implement List

– They have the same methods

List<Person> list;

list = new ArrayList<Person>;

list = new LinkedList<Person>;

– The code works independent of which way you instantiated list

– This is an example of polymorphism

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 14

Java Interfaces

• Template for an interfacepublic interface <interfaceName> {

public <returnType> <methodName>(

<paramList>);

public final <constType> constName

= <constValue>;

}

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 15

Using an interface

• Use the implements keyword header of a class that needs to

have all the methods of the interface

• Implement (provide code for) each method in the interfacepublic class <implementingClassName>

implements <interfaceName> {

public <returnType> <methodName>(

<paramList>){

// code for method

}

// add any other methods and data that is

// appropriate for the class

}

©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4th Ed Chapter 10 - 16

Using an interface type

• You can use an interface type as the type for a reference (object) variable<interfaceName> <identifier>;

• You have to instantiate the object using a class that implements the interface<identifier>

= new <implementingClassName>();

• Now you can only call the methods that appear in the interface.


Recommended