45
Grouping objects Grouping objects Collections and iterators

Grouping objects Collections and iterators. 04/11/2004Lecture 4: Grouping Objects2 Main concepts to be covered Collections Loops Iterators Arrays

  • View
    225

  • Download
    0

Embed Size (px)

Citation preview

Grouping objectsGrouping objects

Collections and iterators

04/11/2004 Lecture 4: Grouping Objects 2

Main concepts to be coveredMain concepts to be covered

• Collections• Loops• Iterators• Arrays

04/11/2004 Lecture 4: Grouping Objects 3

The requirement to group The requirement to group objectsobjects

• Many applications involve collections of objects:• Personal organizers.• Library catalogs.• Student-record system.

• The number of items to be stored varies.• Items added.• Items deleted.

04/11/2004 Lecture 4: Grouping Objects 4

A personal notebookA personal notebook

• Notes may be stored.• Individual notes can be viewed.• There is no limit to the number of notes.• It will tell you how many notes are stored.

04/11/2004 Lecture 4: Grouping Objects 5

A personal notebookA personal notebook

04/11/2004 Lecture 4: Grouping Objects 6

Class LibrariesClass Libraries

• Learning to program is to learn how to reuse code written by other. There is no point in reinventing the wheel.

• Java comes with a library of useful classes, which are referred to as the Java API

• They are organized in packages that follow a directory structure

04/11/2004 Lecture 4: Grouping Objects 7

Class LibrariesClass Libraries

04/11/2004 Lecture 4: Grouping Objects 8

Class librariesClass libraries

• You can access the classes from your code, using the import statement• import java.util.Vector;• import java.util.*;

• Grouping objects is a recurring requirement.• The java.util package contains classes for

doing this.• We will use ArrayList as a first example

04/11/2004 Lecture 4: Grouping Objects 9

Class LibrariesClass Libraries

04/11/2004 Lecture 4: Grouping Objects 10

import java.util.ArrayList;

/** * ... */public class Notebook{ // Storage for an arbitrary number of notes. private ArrayList notes;  /** * Perform any initialization required for the * notebook. */ public Notebook() { notes = new ArrayList(); }

...}

04/11/2004 Lecture 4: Grouping Objects 11

Object structures with Object structures with collectionscollections

04/11/2004 Lecture 4: Grouping Objects 12

Adding a third noteAdding a third note

04/11/2004 Lecture 4: Grouping Objects 13

Features of the collectionFeatures of the collection

• It increases its capacity as necessary.• It keeps a private count (size() accessor).• It keeps the objects in order.• Details of how all this is done are hidden.

• Does that matter? Does not knowing how prevent us from using it?

04/11/2004 Lecture 4: Grouping Objects 14

Using the collectionUsing the collectionpublic class Notebook{ private ArrayList notes; ...  public void storeNote(String note) { notes.add(note); }  public int numberOfNotes() { return notes.size(); }

...}

Adding a new note

Returning the number of notes(delegation).

04/11/2004 Lecture 4: Grouping Objects 15

Index numberingIndex numbering

04/11/2004 Lecture 4: Grouping Objects 16

Retrieving an objectRetrieving an object

Index validity checks

Retrieve and print the note

public void showNote(int noteNumber){ if(noteNumber < 0) { // This is not a valid note number. } else if(noteNumber < numberOfNotes()) { System.out.println(notes.get(noteNumber)); } else { // This is not a valid note number. }}

04/11/2004 Lecture 4: Grouping Objects 17

Removing an itemRemoving an itempublic void removeNote(int noteNumber) { if(noteNumber < 0) { // This is not a valid note number, so do

nothing. } else if(noteNumber < numberOfNotes()) { // This is a valid note number. notes.remove(noteNumber); } else { // This is not a valid note number, so do

nothing. } }

04/11/2004 Lecture 4: Grouping Objects 18

Removal may affect Removal may affect numberingnumbering

04/11/2004 Lecture 4: Grouping Objects 19

ReviewReview

• Collections allow an arbitrary number of objects to be stored.

• Class libraries usually contain tried-and-tested collection classes.

• Java’s class libraries are called packages.• We have used the ArrayList class from

the java.util package.

04/11/2004 Lecture 4: Grouping Objects 20

ReviewReview

• Items may be added and removed.• Each item has an index.• Index values may change if items are

removed (or further items added).• The main ArrayList methods are add, get, remove and size.

04/11/2004 Lecture 4: Grouping Objects 21

IterationIteration

• We often want to perform some actions an arbitrary number of times.• E.g., print all the notes in the notebook. How

many are there?• Most programming languages include loop

statements to make this possible.• Java has three sorts of loop statements.

• We will focus on its while loop to begin with.

04/11/2004 Lecture 4: Grouping Objects 22

While loop pseudo codeWhile loop pseudo code

while(loop condition) { loop body}

while(there is at least one more note to be printed) { show the next note}

Boolean testwhile keyword

Statements to be repeated

Pseudo-code example to print every note

General form of a while loop

04/11/2004 Lecture 4: Grouping Objects 23

A Java exampleA Java example

/** * List all notes in the notebook. */public void listNotes(){ int index = 0; while(index < notes.size()) { System.out.println(notes.get(index)); index++; }}

Increment by one

04/11/2004 Lecture 4: Grouping Objects 24

IncrementsIncrements

• i++ : the value of i is used first before it is being incremented with one• a = 5; b = a++;• a == 6; b == 5;

• ++i: increments i with one, the new value of i is then used.• a = 5; b = ++a;• a == 6; b == 6;

04/11/2004 Lecture 4: Grouping Objects 25

Iterating over a collectionIterating over a collection

Iterator it = myCollection.iterator();while(it.hasNext()) { call it.next() to get the next object do something with that object}

java.util.IteratorReturns an Iterator

object

public void listNotes(){ Iterator it = notes.iterator(); while(it.hasNext()) { System.out.println(it.next()); }}

04/11/2004 Lecture 4: Grouping Objects 26

IteratorsIterators

• An iterator is an object that provides functionality to iterate over all elements of a collection or container class

• java.util.Iterator • two main methods: hasNext() to check if the

Iterator has more elements and next() to take the next object from the Iterator.

• You can access an iterator for all java collections.• Not all collections can be accessed using indexes.

04/11/2004 Lecture 4: Grouping Objects 27

The The auctionauction project project

• The auction project provides further illustration of collections and iteration.

• Two further points to follow up:• The null value.• Casting. Used to store the result of get into a

variable:• String message = (String) notes.get(0);

04/11/2004 Lecture 4: Grouping Objects 28

The The auctionauction project project

04/11/2004 Lecture 4: Grouping Objects 29

The Lot ClassThe Lot Class

public void bidFor(Person bidder, long value) {

if((highestBid == null) || (highestBid.getValue() < value)) { // This bid is the best so far. setHighestBid(new Bid(bidder, value)); } else { System.out.println("Lot number: " + getNumber() + " (" + getDescription() + ")" + " already has a bid of: " + highestBid.getValue()); } }

04/11/2004 Lecture 4: Grouping Objects 30

The The nullnull Keyword Keyword

• highestBid == null;• The Java keyword null is used to mean ‘no

object’ when a variable is not currently holding a reference to a particular object.

• setHighestBid(new Bid(bidder, value));• two things are done here:

• we create a new object Bid• we pass this new object immediately to the method

04/11/2004 Lecture 4: Grouping Objects 31

The Auction ClassThe Auction Classpublic void showLots() { Iterator it = lots.iterator(); while(it.hasNext()) { Lot lot = (Lot) it.next(); System.out.println(lot.getNumber() + ": " + lot.getDescription()); // Include any details of a highest bid. Bid highestBid = lot.getHighestBid(); if(highestBid != null) { System.out.println(" Bid: " + highestBid.getValue()); } else { System.out.println(" (No bid)"); } } }

04/11/2004 Lecture 4: Grouping Objects 32

Type CastingType Casting

• Lot lot = (Lot) it.next();• the return value of the Iterator method next() is

an object of type Object. To store this in an object of type Lot we need to explicitly convert it that type. This is called Casting

• This can only been done if the objects we have added to the container were originally of type Lot.

04/11/2004 Lecture 4: Grouping Objects 33

Type CastingType Casting

• Collections in Java allow for the storage of any type of objects. In order to do so it transforms everything you add into an object of type Object.

• When retrieving objects from a collection we normally cast them back into their original types.

04/11/2004 Lecture 4: Grouping Objects 34

Wrapper ClassesWrapper Classes

• Container classes in Java can only contain objects.

• Primitive types can therefore not be added.• To solve this, Java provides wrapper

classes: Integer, Float, Double• Integer a = new Integer(10);• int b = a.intValue();

04/11/2004 Lecture 4: Grouping Objects 35

Fixed-size collectionsFixed-size collections

• Sometimes the maximum collection size can be pre-determined.

• Programming languages usually offer a special fixed-size collection type: an array.

• Java arrays can store objects or primitive-type values.

• Arrays use a special syntax.

04/11/2004 Lecture 4: Grouping Objects 36

The The weblog-analyzerweblog-analyzer project project

• Web server records details of each access.• Supports webmaster’s tasks.

• Most popular pages.• Busiest periods.• How much data is being delivered.• Broken references.

• Analyze accesses by hour.

04/11/2004 Lecture 4: Grouping Objects 37

The The weblog-analyzerweblog-analyzer project project

04/11/2004 Lecture 4: Grouping Objects 38

Creating an array objectCreating an array object

public class LogAnalyzer{ private int[] hourCounts; private LogfileReader reader;  public LogAnalyzer() { hourCounts = new int[24]; reader = new LogfileReader(); } ...}

Array object creation

Array variable declaration

04/11/2004 Lecture 4: Grouping Objects 39

The The hourCountshourCounts array array

04/11/2004 Lecture 4: Grouping Objects 40

Using an arrayUsing an array• Square-bracket notation is used to access an array

element: hourCounts[...]• The number of elements of an array can be

obtained via: hourCounts.length• Elements are used like ordinary variables.

• On the left of an assignment:• hourCounts[hour] = ...;

• In an expression:• adjusted = hourCounts[hour] – 3;• hourCounts[hour]++;

• Arrays are passed by reference while their elements are passed by value.

04/11/2004 Lecture 4: Grouping Objects 41

The for loopThe for loop

• Similar to a while loop.• Often used to iterate a fixed number of

times.• Often used to iterate over an array.

04/11/2004 Lecture 4: Grouping Objects 42

For loop pseudo-codeFor loop pseudo-code

for(initialization; condition; post-body action) { statements to be repeated}

General form of a for loop

Equivalent in while-loop form

initialization;while(condition) { statements to be repeated post-body action}

04/11/2004 Lecture 4: Grouping Objects 43

A Java exampleA Java example

for(int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]);}

int hour = 0;while(hour < hourCounts.length) { System.out.println(hour + ": " + hourCounts[hour]); hour++;}

for loop version

while loop version

04/11/2004 Lecture 4: Grouping Objects 44

ReviewReview

• Arrays are appropriate where a fixed-size collection is required.

• Arrays use special syntax.• For loops offer an alternative to while loops

when the number of repetitions is known.• For loops are often used to iterate over

arrays.

04/11/2004 Lecture 4: Grouping Objects 45

ConceptsConcepts

• Java API• packages

• import

• ArrayList• Iterator

• type cast

• for• while

• array

• a++ • ++a

• null