Grouping objects Grouping 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 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 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 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 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 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 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 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 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 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.