45
Grouping objects Grouping objects Collections and iterators

Grouping objects

  • Upload
    taniel

  • View
    37

  • Download
    0

Embed Size (px)

DESCRIPTION

Grouping objects. Collections and iterators. Main concepts to be covered. Collections Loops Iterators Arrays. The requirement to group objects. Many applications involve collections of objects: Personal organizers. Library catalogs. Student-record system. - PowerPoint PPT Presentation

Citation preview

Page 1: Grouping objects

Grouping objectsGrouping objects

Collections and iterators

Page 2: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 2

Main concepts to be coveredMain concepts to be covered

• Collections• Loops• Iterators• Arrays

Page 3: Grouping objects

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.

Page 4: Grouping objects

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.

Page 5: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 5

A personal notebookA personal notebook

Page 6: Grouping objects

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

Page 7: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 7

Class LibrariesClass Libraries

Page 8: Grouping objects

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

Page 9: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 9

Class LibrariesClass Libraries

Page 10: Grouping objects

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(); }

...}

Page 11: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 11

Object structures with Object structures with collectionscollections

Page 12: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 12

Adding a third noteAdding a third note

Page 13: Grouping objects

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?

Page 14: Grouping objects

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).

Page 15: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 15

Index numberingIndex numbering

Page 16: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 16

Retrieving an objectRetrieving an objectIndex 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. }}

Page 17: Grouping objects

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. } }

Page 18: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 18

Removal may affect Removal may affect numberingnumbering

Page 19: Grouping objects

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.

Page 20: Grouping objects

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.

Page 21: Grouping objects

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.

Page 22: Grouping objects

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

Page 23: Grouping objects

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

Page 24: Grouping objects

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;

Page 25: Grouping objects

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()); }}

Page 26: Grouping objects

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.

Page 27: Grouping objects

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);

Page 28: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 28

The The auctionauction project project

Page 29: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 29

The Lot ClassThe Lot Classpublic 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()); } }

Page 30: Grouping objects

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

Page 31: Grouping objects

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)"); } } }

Page 32: Grouping objects

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.

Page 33: Grouping objects

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.

Page 34: Grouping objects

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();

Page 35: Grouping objects

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.

Page 36: Grouping objects

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.

Page 37: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 37

The The weblog-analyzerweblog-analyzer project project

Page 38: Grouping objects

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

Page 39: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 39

The The hourCountshourCounts array array

Page 40: Grouping objects

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.

Page 41: Grouping objects

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.

Page 42: Grouping objects

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}

Page 43: Grouping objects

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

Page 44: Grouping objects

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.

Page 45: Grouping objects

04/11/2004 Lecture 4: Grouping Objects 45

ConceptsConcepts• Java API• packages

• import

• ArrayList• Iterator

• type cast

• for• while

• array

• a++ • ++a

• null