Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS2110: SW Development Methods Textbook readings: MSD, Chapter 8 (Sect. 8.1 and 8.2) But we won’t implement our own, so study the section on Java’s Map.

Similar presentations


Presentation on theme: "CS2110: SW Development Methods Textbook readings: MSD, Chapter 8 (Sect. 8.1 and 8.2) But we won’t implement our own, so study the section on Java’s Map."— Presentation transcript:

1 CS2110: SW Development Methods Textbook readings: MSD, Chapter 8 (Sect. 8.1 and 8.2) But we won’t implement our own, so study the section on Java’s Map classes… MSD, Chapter 9 (Sect. 9.3.2 and 9.3.4) Sets and Maps in Java

2 Set and HashSet in Java Collections We’ve focused on List and ArrayList, but now… A Set is a collection of items that are unordered are unique (no duplicates) What kind of operations do we think of? element membership (add, remove, isMember, etc.) manipulation (union, intersection,…) Java has: Set – an interface Several implementation classes, including HashSet

3 Java’s Set Interface (see MSD, p. 625) The Set interface looks just like the Collection interface, but with more specific behaviors boolean add(elem) – returns false if already there boolean remove(elem) – returns false if not there What’s sweet here: Try to add something that’s already there? Remove something that’s not there? No problem! It basically ignores that attempt! This allows some powerful methods to be very short See examples on pages 625 and 626

4 Examples using Set How many unique items in any Collection object? int numUniq = new HashSet(aCollection).size(); Creates a new set “on the fly” using the constructor that adds all items from an existing collection Remove duplicates from any Collection object? Set noDups = new HashSet( aCollection ); aCollection.clear(); aCollection.addAll( noDups ); Note we don’t have to iterate We rely on useful constructors and bulk operations Procedural Abstraction opportunity: Put these lines of code into a method with a good names

5 Using Sets in Java: TreeSet class TreeSet is a concrete class that implements Set How’s it work inside? How is it implemented? We won’t focus on that in CS2110 (not now anyway) Because it’s a well-implemented abstraction, you don’t need to understand what’s in the black-box The “tree” refers to type of data structure used But you do need one thing: All items must be Comparable All items must correctly implement compareTo() Bonus! Iterating over a TreeSet uses compareTo()’s ordering. So prints in “correct” order

6 Using Sets in Java: HashSet class HashSet is a concrete class that implements Set How’s it work inside? How is it implemented? Right now, we’ll show you the one thing you need to know but not explain the details The “hash” refers to this idea in computing Data objects have state values that identify them uniquely, and… Often we want to get a “hash value” or “ID-like” value for an object: Equal items must have the same hash value Un-equal items may have the same value Hash-value used to link objects to “buckets”

7 Hash Values for Java Classes Hashing to get a hash-value is very useful, so… Java’s superclass Object defines a method hashCode() for every class If you want to use HashSet or any other class that uses hashing, override this method Important: when you override equals(), you should override hashCode() too! Otherwise things break when you don’t expect it. Make sure that things that are equals() as you define that will also hash to the same value Overriding hashCode() is often very very easy

8 Over-riding hashCode() in Java Goal: make sure that two items that are equals() return the same value when hashCode() is called Focus on what fields determine identity of objects Example #1: Class Person Say two objects are equals() if their SSN fields are equal Example #2: Class Song Say two objects are equals() if their title and artist fields are both equal Caveat: later we’ll see that the “simple” rules you’ll see next may not always have the best performance (but they will work)

9 Over-riding hashCode() in Java (2) If your object’s “key” is a String Guess what? Most Java library classes already implement hashCode(). So use this fact! If just one String value, your hashCode() method should just return the result of calling hashCode() on that String object If multiple fields, here’s a simple solution: get the hash-value for each individual field and just add them See example in MSD text for Class Dog (p. 578) Example #2: for class Song where title and artist must be equals(), the method just does: return artist.hashCode() + title.hashCode();

10 Over-riding hashCode() in Java (2) If your “key” field is numeric? If integers, then: Just return that field Example #2: Class InventoryItem Just return the int value itemID for that object If not an integer but a double etc. Use the wrapper class to create an object Double dval = new Double(doubleKeyField); Each wrapper class has hashCode() defined, so… return dval.hashCode(); Multiple fields affect equals()? Again, sum up the hash-values for each field.

11 Summary on Set, HashSet HashSet is an implementation of Set you can use Don’t forget to implement hashCode() for items you want to store! You MUST over-ride hashCode() and equals() together! If you do one, always do the other! Items in Sets are not ordered But you can construct a List from a Set and sort it (in two lines of code) add() handles duplicates, and remove() ignores missing items

12 ADT Table What’s a table? What’s “lookup”?

13 ADT Table Lookup: find data given some key value ADT Table’s model of information Some set of values associated with a key Operations Lookup: given a key, retrieve the values Is this key stored in the table? Insert, remove, updates, etc. How could we implement this? You’ve been using lists (arrays, ArrayLists) and the contains() and indexOf() methods Disadvantages?

14 Java Type: Maps Maps Like sets, but have instead of Dictionary example Other examples Student’s email to Facebook Profile Host Names to IP addresses How to declare: Map … Examples: Map // maps string to a number Map // maps Student to a String Map > // e.g. a schedule

15 Important Map Methods Keys and values put (key, value), get(key), remove(key) containsKey(key), containsValue(value) Can think of a Map as a set of keys and a set of values keySet() // returns a Set of key values values() // returns a Collection of values (Note: Map itself does not extend Collection, but it uses Sets and is part of the Java Collection Framework) Others too! See doc or a Java reference.

16 Concrete Classes HashMap Most commonly used. Allows nulls as values. Need a hashCode() method TreeMap Uses a search tree data structure Values stored in a sorted order Keys must have a compareTo() method Or can create with a Comparator object HashTable Old class -- deprecated! Don’t use!

17 Why Are Maps Useful and Important? “Lookup values for a key” -- an important task We often want to do this! Need flexibility for what values are stored for a given key Need to use objects other than Strings or ints as key values Efficiency matters for large sets of data HashMap has O(1) lookup cost TreeMap is O(lg n) which is still very good

18 Summary Set and Table are important ADTs Java supports these directly Set interface Concrete classes: HashSet, TreeSet Note: How add() and remove() fail “nicely” (I.e. return false) How used to achieve solve more complex tasks with Collections HashSet relies on proper implementation of hashCode() hashCode() and equals() must be “consistent” TreeSet relies on compareTo()

19 Summary (2) Map Interface Concrete classes: HashMap and TreeMap Declared using both key-type and value-type, e.g. Map > Important because “lookup” is a frequent problem Lookup for maps is very efficient for large amounts of data Code often needs to take different actions for: The first time a key/value pair is inserted into a map We want to update information for an existing key

20 Note: Map not IS-A Collection It’s wrong to say a Map is a Collection It does not implement the Collection interface Why not? For example, add(E) doesn’t make sense for a map We need to add a (key,value) pair But Map and its concrete classes are part of the JCF They use Sets as part of their definition and API

21

22 Big Picture on Java Collections Unit Java Collections Framework A large collections of interfaces and classes Includes things we can use “as is” (concrete classes) and building blocks for new things (abstract classes) Classes that exist to contain static methods, e.g. Collections class (see also Arrays class) Power of inheritance, interfaces, polymorphism See how “type” Collection and List are used in parameter lists and in Collections class’ methods (e.g. sort) Be aware of and start to use Java 5.0 generics with your collections

23 Big Picture on Java Collections Unit (2) Iterators: both concepts and the practice Example of procedural abstraction (use, methods) and data abstraction (what’s really in a iterator object?) Using these in Java for Collections, Lists (methods, cursor, etc.) Procedural abstraction: the concepts, examples Function-objects and procedural abstraction Encapsulating “functionality” or “control” in an object Comparator objects (contrast to implementing Comparable interface) Java trick: anonymous classes

24 Big Picture on Java Collections Unit (3) Java skills: Concrete collection classes and methods for you to use ArrayList and ListIterator HashSet Must over-ride hashCode() Collections static methods See JavaDoc or p 587 in MSD textbook E.g. sort, reverse, binarySearch, fill, shuffle, min, max,… Implement Comparable for your collection items Define Comparator classes for more powerful, flexible use


Download ppt "CS2110: SW Development Methods Textbook readings: MSD, Chapter 8 (Sect. 8.1 and 8.2) But we won’t implement our own, so study the section on Java’s Map."

Similar presentations


Ads by Google