Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Grouping objects Collections and iterators Main concepts to be covered • • • • Collections Loops Iterators Arrays 04/11/2004 Lecture 4: Grouping Objects 2 The requirement to group objects • 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 3 A 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 4 A personal notebook 04/11/2004 Lecture 4: Grouping Objects 5 Class 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 6 Class Libraries 04/11/2004 Lecture 4: Grouping Objects 7 Class 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 8 Class Libraries 04/11/2004 Lecture 4: Grouping Objects 9 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 10 Object structures with collections 04/11/2004 Lecture 4: Grouping Objects 11 Adding a third note 04/11/2004 Lecture 4: Grouping Objects 12 Features 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 13 Using the collection public class Notebook { private ArrayList notes; ... public void storeNote(String note) { notes.add(note); Adding a new note } public int numberOfNotes() { return notes.size(); } Returning the number of notes (delegation). ... } 04/11/2004 Lecture 4: Grouping Objects 14 Index numbering 04/11/2004 Lecture 4: Grouping Objects 15 Retrieving an object Index validity checks 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. } } Retrieve and print the note 04/11/2004 Lecture 4: Grouping Objects 16 Removing an item public 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 17 Removal may affect numbering 04/11/2004 Lecture 4: Grouping Objects 18 Review • Collections allow an arbitrary number of objects to be stored. • Class libraries usually contain tried-andtested 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 19 Review • 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 20 Iteration • 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 21 While loop pseudo code General form of a while loop while keyword Boolean test while(loop condition) { loop body } Statements to be repeated Pseudo-code example to print every note while(there is at least one more note to be printed) { show the next note } 04/11/2004 Lecture 4: Grouping Objects 22 A 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 23 Increments • 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 24 Iterating over a collection java.util.Iterator Returns an Iterator object Iterator it = myCollection.iterator(); while(it.hasNext()) { call it.next() to get the next object do something with that object } public void listNotes() { Iterator it = notes.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } 04/11/2004 Lecture 4: Grouping Objects 25 Iterators • 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 26 The auction 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 27 The auction project 04/11/2004 Lecture 4: Grouping Objects 28 The 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 29 The null 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 30 The Auction Class public 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 31 Type 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 32 Type 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 33 Wrapper 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 34 Fixed-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 primitivetype values. • Arrays use a special syntax. 04/11/2004 Lecture 4: Grouping Objects 35 The weblog-analyzer 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 36 The weblog-analyzer project 04/11/2004 Lecture 4: Grouping Objects 37 Creating an array object public class LogAnalyzer { private int[] hourCounts; private LogfileReader reader; Array variable declaration public LogAnalyzer() { hourCounts = new int[24]; reader = new LogfileReader(); } ... Array object creation } 04/11/2004 Lecture 4: Grouping Objects 38 The hourCounts array 04/11/2004 Lecture 4: Grouping Objects 39 Using 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 40 The 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 41 For loop pseudo-code General form of a for loop for(initialization; condition; post-body action) { statements to be repeated } Equivalent in while-loop form initialization; while(condition) { statements to be repeated post-body action } 04/11/2004 Lecture 4: Grouping Objects 42 A Java example for loop version for(int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]); } while loop version int hour = 0; while(hour < hourCounts.length) { System.out.println(hour + ": " + hourCounts[hour]); hour++; } 04/11/2004 Lecture 4: Grouping Objects 43 Review • 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 44 Concepts • Java API • packages • for • while • import • array • ArrayList • Iterator • a++ • ++a • type cast • null 04/11/2004 Lecture 4: Grouping Objects 45