1 / 51

Lecture Objectives

Lecture Objectives. To understand the Java Map and Set interfaces and how to use them To be introduced to the implementation of Map s and Set s To see how two earlier applications can be implemented more easily using Map objects for data storage. Introduction.

ayita
Télécharger la présentation

Lecture Objectives

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture Objectives • To understand the Java Map and Set interfaces and how to use them • To be introduced to the implementation of Maps and Sets • To see how two earlier applications can be implemented more easily using Map objects for data storage CS340

  2. Introduction • We learned about part of the Java Collection Framework in Chapter 2 (ArrayListand LinkedList) • The classes that implement the List interface are all indexed collections • An index or subscript is associated with each element • The element's index often reflects the relative order of its insertion in the list • Searching for a particular value in a list is generally O(n) • An exception is a binary search of a sorted object, which is O(log n) CS340

  3. Introduction (cont.) • In this chapter, we consider another part of the Collectionhierarchy: the Set interface and the classes that implement it • Set objects • are not indexed • do not reveal the order of insertion of items • enable efficient search and retrieval of information • allow removal of elements without moving other elements around CS340

  4. Introduction (cont.) • Relative to a Set, Map objects provide efficient search and retrieval of entries that contain pairs of objects (a unique key and the information) • Hash tables (implemented by a Map or Set) store objects at arbitrary locations and offer an average constant time for insertion, removal, and searching CS340

  5. Sets and the SetInterface Section 7.1 CS340

  6. Sets and the Set Interface CS340

  7. TheSetAbstraction • A set is a collection that contains no duplicate elements and at most one null element • adding "apples" to the set{"apples", "oranges", "pineapples"} results in the same set (no change) • Operations on sets include: • testing for membership • adding elements • removing elements • union A ∪ B • intersection A ∩ B • difference A – B • subset A ⊂ B CS340

  8. TheSetAbstraction(cont.) • The union of two sets A, B is a set whose elements belong either to A or B or to both A and B. Example: {1, 3, 5, 7} ∪ {2, 3, 4, 5} is {1, 2, 3, 4, 5, 7} • The intersection of sets A, B is the set whose elements belong to both A and B. Example: {1, 3, 5, 7} ∩ {2, 3, 4, 5} is {3, 5} • The difference of sets A, B is the set whose elements belong to A but not to B. Examples: {1, 3, 5, 7} – {2, 3, 4, 5} is {1, 7}; {2, 3, 4, 5} – {1, 3, 5, 7} is {2, 4} • Set A is a subset of set B if every element of set A is also an element of set B. Example: {1, 3, 5, 7} ⊂ {1, 2, 3, 4, 5, 7} is true CS340

  9. TheSetInterface and Methods • Required methods: testing set membership, testing for an empty set, determining set size, and creating an iterator over the set • Optional methods: adding an element and removing an element • Constructors to enforce the “no duplicate members” criterion • The add method does not allow duplicate items to be inserted CS340

  10. TheSetInterface and Methods(cont.) • Required method: containsAll tests the subset relationship • Optional methods: addAll, retainAll, and removeAll perform union, intersection, and difference, respectively CS340

  11. TheSetInterface and Methods(cont.) Sally Bob Ann Bill Jill Jill Ann setA setB CS340

  12. TheSetInterface and Methods(cont.) Sally Bob Ann Bill Jill Jill Ann setA setB setA.addAll(setB); CS340

  13. TheSetInterface and Methods(cont.) Sally Bob Ann Bill Jill Jill Ann setA setB setA.addAll(setB); System.out.println(setA); Outputs: [Bill, Jill, Ann, Sally, Bob] CS340

  14. TheSetInterface and Methods(cont.) Sally Bob Ann Bill Jill Jill Ann setA setB If a copy of original setA is in setACopy, then . . . CS340

  15. TheSetInterface and Methods(cont.) Sally Bob Ann Bill Jill Jill Ann setA setB setACopy.retainAll(setB); CS340

  16. TheSetInterface and Methods(cont.) Sally Bob Ann Bill Jill Jill Ann setA setB setACopy.retainAll(setB); System.out.println(setACopy); Outputs: [Jill, Ann] CS340

  17. TheSetInterface and Methods(cont.) Sally Bob Ann Bill Jill Jill Ann setA setB setACopy.removeAll(setB); System.out.println(setACopy); Outputs: [Sally] CS340

  18. Comparison of Lists and Sets • Collections implementing the Set interface must contain unique elements • Unlike the List.add method, the Set.add method returns false if you attempt to insert a duplicate item • Unlike a List, a Set does not have a get method—elements cannot be accessed by index CS340

  19. Comparison of Lists and Sets (cont.) • You can iterate through all elements in a Set using an Iterator object, but the elements will be accessed in arbitrary order for (String nextItem : setA) { //Do something with nextItem … } CS340

  20. Maps and the Map Interface Section 7.2 CS340

  21. Maps and the MapInterface • The Map is related to the Set • Mathematically, a Map is a set of ordered pairs whose elements are known as the key and the value • Keys must be unique, but values need not be unique • You can think of each key as a “mapping” to a particular value • A map provides efficient storage and retrieval of information in a table • A map can have many-to-onemapping: (B, Bill), (B2, Bill) {(J, Jane), (B, Bill), (S, Sam), (B1, Bob), (B2, Bill)} CS340

  22. Maps and the MapInterface(cont.) • In an onto mapping, all the elements of valueSet have a corresponding member in keySet • The Map interface should have methods of the form V.get (Object key) V.put (K key, V value) CS340

  23. Maps and the MapInterface(cont.) • When information about an item is stored in a table, the information should have a unique ID • A unique ID may or may not be a number • This unique ID is equivalent to a key CS340

  24. MapHierarchy CS340

  25. MapInterface CS340

  26. MapInterface (cont.) • The following statements build a Map object: Map<String, String> aMap = new HashMap<String, String>(); aMap.put("J", "Jane"); aMap.put("B", "Bill"); aMap.put("S", "Sam"); aMap.put("B1", "Bob"); aMap.put("B2", "Bill"); J Jane B Bill S Sam B1 Bob B2 CS340

  27. MapInterface (cont.) aMap.get("B1") returns: "Bob" J Jane B Bill S Sam B1 Bob B2 CS340

  28. MapInterface (cont.) aMap.get("Bill") returns: null ("Bill" is a value, not a key) J Jane B Bill S Sam B1 Bob B2 CS340

  29. Creating an Index of Words • In Section 6.4 we used a binary search tree to store an index of words occurring in a term paper • Each element in the binary search tree consisted of a word followed by a three digit line number • If we store the index in a Map, we can store all the line number occurrences for a word in a single index entry CS340

  30. Creating an Index of Words (cont.) • Each time a word is encountered, its list of line numbers is retrieved (using the word as key) • The most recent line number is appended to this list CS340

  31. Creating an Index of Words (cont.) • Listing 7.2 (Method buildIndexAllLines; page 371) CS340

  32. Additional Applications of Maps Section 7.6

  33. Cell Phone Contact List (cont.) • Analysis • A map will associate the name (the key) with a list of phone numbers (value) • Implement ContactListInterface by using a Map<String, List<String>> object for the data type

  34. Cell Phone Contact List (cont.) • Design public class MapContactList implements ContactListInterface { Map<String, List<String>> contacts = new TreeMap<String, List<String>>(); . . . }

  35. Cell Phone Contact List (cont.) • Implementation: writing the required methods using the Map methods is straightforward

  36. Huffman Coding • Problem • Build an array of (weight, symbol) pairs, where weight is the frequency of occurrence of each symbol for any data file • Encode each symbol in the input file by writing the corresponding bit string for that symbol to the output file

  37. Huffman Coding (cont.) • Analysis • For each task in the problem, we need to look up a symbol in a table • Using a Map ensures that the lookup is expected O(1) • For the frequency table, the symbol will be the key, and the value will be the count of its occurrences • We can construct a Huffman tree using a priority queue (Section 6.6) • Then we build a code table that stores the bit string code (obtained from a preorder traversal of the Huffman tree) associated with each symbol

  38. Huffman Coding (cont.) • Design Algorithm for buildFreqTable 1. while there are more characters in the input file 2. Read a character and retrieve its corresponding entry in frequencies. 3. if the value field is null 4. Set value to 1. 5. else 6. Increment value. 7. Create a set view of frequencies. 8. for each entry in the set view 9. Store its data as a weight-symbol pair in the HuffData array. 10. Return the HuffData array.

  39. Huffman Coding (cont.) Algorithm for Method buildCodeTable 1. Get the data at the current root. 2. if a symbol is stored in the current root (reached a leaf node) 3. insert the symbol and bit string code so far as a new code table entry. 4. else 5. append a 0 to the bit string code so far. 6. apply the method recursively to the left subtree. 7. append a 1 to the bit string code. 8. apply the method recursively to the right subtree.

  40. Huffman Coding (cont.) Algorithm for Method encode 1. while there are more characters in the input file 2. read a character and get its corresponding bit string code. 3. write its bit string to the output file.

  41. Huffman Coding (cont.) • Listing 7.12 (Method buildFreqTable; pages 406-408)

  42. Huffman Coding (cont.) • Testing • Download class BitString and write a main method that calls the methods in the proper sequence • For interim testing, read a data file and display the frequency table to verify its correctness • Use StringBuffer or StringBuilder instead of BitString to build a code of characters ('0' or '1') instead of bits; verify its correctness

  43. Navigable Sets and Maps Section 7.7

  44. SortedSet and SortedMap • Java 5.0's SortedSet interface extends Set by providing the user with an ordered view of the elements with the ordering defined by a compareTo method • Because the elements are ordered, additional methods can return the first and last elements and define subsets • The ability to define subsets was limited because subsets always had to include the starting element and exclude the ending element • SortedMap interface provides an ordered view of a map with elements ordered by key value

  45. NavigableSet and NavigableMap • Java 6 added NavigableSet and NavigableMap interfacesas extensions to SortedSet and SortedMap • Java retains SortedSetand SortedMap for compatibility with existing software • The new interfaces allow the user to specify whether the start or end items are included or excluded • They also enable the user to specify a subset or submap that is traversable in the reverse order

  46. NavigableSet Interface (cont.) Listing 7.13 illustrates the use of a NavigableSet. The output of this program consists of the lines: The original set odds is [1, 3, 5, 7, 9] The ordered set b is [3, 5, 7] Its first element is 3 Its smallest element >= 6 is 7

  47. NavigableMapInterface

  48. Application of a NavigableMapInterface • computeAverage computes the average of the values defined in a Map • computeSpans creates a group of submaps of a NavigableMap and passes each submap to computeAverage • Given a NavigableMap in which the keys represent years and the values are some statistics for the year, we can generate a table of averages covering different periods

  49. Application of a NavigableMapInterface (cont.) • Example: Given a map of tropical storms representing the number of tropical storms from 1960 through 1969 List<Number> stormAverage = computeSpans(storms,2) Calculates the average number of tropical storms for each successive pair of years

  50. Method computeAverage /** Returns the average of the numbers in its Map argument. @paramvalueMapThe map whose values are averaged @return The average of the map values */ Public static double computeAverage(Map<Integer, Double> valueMap){ int count = 0; double sum = 0; for(Map.Entry<Integer, Double> entry : valueMap.entrySet()) { sum += entry.getValue().doubleValue(); count++; } return (double) sum / count;

More Related