Notes
Slide Show
Outline
1
CS110 Lecture 13
Thursday, March 11, 2004
  • Announcements
    • hw5 due tonight
    • Spring break next week
    • hw6 due two weeks from tonight
  • Agenda
    • questions
    • TreeMap
    • hw6
    • stub programming
2
Maps
  • arrays and ArrayLists locate entries by index
    • index is an integer position, starting at 0
  • A Map locates entries by key
    • key is often a String (think dictionary, phone book)
  • A map stores key-value pairs
    • key: “Java”     value:            “a modern OO language”



    • key: “UMass”  value:
3
TreeMapDemo.java
  • Class Integer to wrap primitive int
  • Iterator practice
  • Useful toString (for debugging)
  • Remember to cast
  • Same value stored twice
  • Keys that aren’t Strings
4
Getting an Iterator
  •  Set keys = map.keySet();
  •  Iterator keysIterator =      keys.iterator();
  • ask the map for its keySet
  • ask the keySet to give you an Iterator
  • keysIterator is like a list of the keys in the map
  • You can infer from this code that
    • Set and Iterator are classes in the Java API
    • keySet is a method in class TreeMap; it returns a Set
    • iterator is a method in class Set; it returns an Iterator
5
Using an Iterator
  •  while ( keysIterator.hasNext() ) {
  •     String key = (String)keysIterator.next();
  •     terminal.println( " … " + (Integer)map.get( key)) );
  • }
  • hasNext() returns false when at end of list
  • next() returns a reference to the next Object in the list
  • Iterator next method, like TreeMap get method, returns just an Object. Need two casts.
6
Class Lookup
  • Dictionary has no unit test
  • Class Lookup is a client for Dictionary  (and tests it thoroughly)
  • All of Lookup is static
    • > java Lookup <word> <word> … all
  • Lookup.java sends toString messages to a Definition object (line 53) and to a Dictionary object (line 103)


7
Dictionary boxes and arrows
8
Looping on a TreeMap
  • To print the whole Dictionary, Lookup sends a toString message, invoking Dictionary         toString method (line 70)
  • Subtle, since there’s no index to loop with
  • Uses an Iterator object -                               Java tool custom designed for looping
  • Iterator API has just two methods:
    • boolean hasNext()
    • Object next()
9
Building a multiline String
  •  while ( wordIterator.hasNext() ) {
  •     word = (String)wordIterator.next();
  •     definition = this.getEntry( word );
  •     str += word + ":\n" +    definition.toString() + "\n";
  •  }
  • use the key to look up a Definition
  • send the Definition a toString message
  • add two lines to the String str we are building to  represent the whole Dictionary
10
TreeMap summary
  • declaration: TreeMap mapName;
  • creation:      new TreeMap( );
  • put:              mapName.put(Object key, Object obj)
  • get:      (Type)mapName.get(Object key)
  •                                  cast to proper Type
  • length:          mapName.size( )
  • looping: get Set of keys from the map, then get an     Iterator from the set                                 mapName.keySet( ).iterator( )


11
Duplicates?
  • The same value may appear more than once in a collection (array, ArrayList or Map)
    • my wife and I have the same phone number
    • “field” and “instance variable” have the same definition
    • in an array, foo[3] may == foo[7]
  • In a Map, keys are unique (like index in an array)
  • If you want to arrange for one person to have more than one phone number or one word to have more than one definition you need to work harder …
12
Collections of collections
  • Dictionary might map a word to an ArrayList of Definition instances
  • Registrar’s database maps a student ID to a StudentRecord object that contains a Map of courses taken (key course name, value an object storing the grade)
  • Screen maintains a private field that’s an array of arrays of char:
  •   private char[][] pixels;
13
Figure 4.5
Object structure of a 2x3 Screen
14
hw6
  • Due Thursday after Spring break
  • TreeMap practice
    • class Directory
    • little Bank, using a TreeMap

15
Directory
  • Model windows folder
  • Contains TextFiles
    • (not other Folders - wait for Chapter 5)
  • API: create, add file to, get file from, get size, get owner, get create/mod date
  • Design: Directory object has a TreeMap field storing TextFile objects keyed by String filename
  • You write this for homework
16
Stub programming
  • Start with all javadoc comments and method declarations, empty method bodies
  • Fill in code a method at a time                                (perhaps even a line at a time)
  • Compile and test as you go along!