220 likes | 403 Views
Grouping objects. Arrays, Collections and Iterators. 1.0. Main concepts to be covered. Arrays Collections Iterators. Requirement to group objects. Many applications for collections of objects: Personal organizers Library catalogs Student-record system
E N D
Grouping objects Arrays, Collections and Iterators 1.0
Main concepts to be covered • Arrays • Collections • Iterators
Requirement to group objects • Many applications for collections of objects: • Personal organizers • Library catalogs • Student-record system • The number of items to be stored varies: • Items added • Items deleted
Fixed-size collections • Programming languages usually offer a special fixed-size collection type: an array • Arrays are built-in, use [] syntax • Java arrays can store objects or primitive-type values • Maximum collection size must be fixed at Array creation time • How is Array creation time more dynamic than in other programming languages, such as C++?
Creating an array object public class LogAnalyzer { private int[] hourCounts; private LogfileReader reader; public LogAnalyzer() { hourCounts = new int[24]; reader = new LogfileReader(); } ... } Array variable declaration Array object creation
Using an array • Square-bracket notation is used to access an array element:hourCounts[hour] • Elements are used like ordinary variables • In an expression: • adjusted = hourCounts[hour] – 3; • hourCounts[hour]++;
Class libraries • Collections of useful classes • Encourages reuse of design and code • Java organizes its libraries in packages • The java.util package includes classes for grouping objects in collections
A personal notebook • Notes may be stored • No limit to the number of notes • It tells how many notes are stored
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(); } ... }
Features of ArrayList • It keeps the objects in order • It increases its capacity as necessary • It keeps a private count: size() accessor retrieves it
Using ArrayList collection public 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).
Adding a third note myBook.add(“11:30 meet John”)
Retrieving an object public void showNote(int noteNumber) { if(noteNumber<0 && noteNumber >= numberOfNotes()) { // This is not a valid note number. } else System.out.println(notes.get(noteNumber)); } Retrieve and print the note
Removal may affect numbering myBook.remove(1)
Review: ArrayList • 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 • For more methods, see API document
Collections framework • Goals comparable to C++’s STL • Data structures: • Vector, LinkedList, HashSet, etc. • Algorithms: • Sorting, searching, shuffling, etc.
Loops and bugs • Why are loops often a cause of bugs? • What kind of bugs? • Wouldn’t be nice to avoid these bugs?
Iterating over a collection Returns an Iterator object java.util.Iterator 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()); } } How does Iteratorhelp avoid bugs?
Review: loops and Iterator • Java while and for loops are similar to C++ • Similar bugs, too! • Collection classes have special Iterator objects that simplify iteration over the whole collection • Bounds-checking methods help avoid bugs