Tree Maps and Tree Sets The JCF Binary Tree classes CS-2851 Dr. Mark L. Hornick 1 Map definition review A map is a collection in which each Entry element has two parts: a unique key part a value part (which may not be unique) Entry key value Each unique key “maps” to a corresponding value Example: a map of students, in which each key is the (unique) student ID, and each (non-unique?) value is a reference to a student object. CS-2851 Dr. Mark L. Hornick 2 TreeMap : The JCF implementation of a Binary Tree TreeMap stores a Map in a red-black tree, ordered by (unique) keys public class TreeMap<K, V> implements SortedMap<K, V> extends AbstractMap<K, V> Example: TreeMap<Integer, Student> students; //Integer: unique student ID number //Student: student object CS-2851 Dr. Mark L. Hornick 3 JCF TreeMap methods Implements the Map interface e.g. no iterator() method But Map does define Put(k,v) – insert a key/value entry into the Binary Tree Remove(k) – remove the entry with the specified key containsKey(k) – search for the entry with key k containsValue(v) – search for an entry with value v Could be more than one entry; each with a unique key size(), equals(), clear() CS-2851 Dr. Mark L. Hornick 4 The put() method is used to insert elements public V put (K key, V value) /** * Ensures that there is an element in this TreeMap object * with the specified key&value pair. If this TreeMap * object had an element with the specified key before * this method was called, the previous value associated * with that key has been returned. Otherwise, null * has been returned. * The worstTime (n) is O (log n). * * @param key – the specified key * @param value – the specified value * @return the previous value associated with key, if * there was such a mapping; otherwise, null. * */ CS-2851 Dr. Mark L. Hornick 5 The containsKey() method determines if the TreeMap contains an entry with a specified unique key public boolean containsKey (Object key) /** * Determines if this TreeMap object contains a mapping * with a specified key. * The worstTime (n) is O (log n). WHY??? * * @param key – the specified key * * @return true – if this TreeMap object contains a * mapping with the specified key; otherwise, false. */ CS-2851 Dr. Mark L. Hornick 6 The containsValue() method determines if the TreeMap contains an entry with a specified value public boolean containsValue (Object value) /** * Determines if this TreeMap object contains a mapping * with a specified value. * The worstTime (n) is O (n). WHY??? * * @param value – the specified value * * @return true – if this TreeMap object contains * at least one mapping with the specified value; * otherwise, false. */ CS-2851 Dr. Mark L. Hornick 7 Some other Map interface methods implemented in TreeMap public V remove (Object key) public V get (Object key) Removes an entry with the specified key Returns the associated value Gets the associated value of an entry with the specified key public Set entrySet() Returns a Set object reference Which can be iterated CS-2851 Dr. Mark L. Hornick 8 The two TreeMap constructors (required by SortedMap) public TreeMap( ) { // comparator = null; key class implements // Comparable interface } // default constructor public TreeMap (Comparator<? super K> c) { comparator = c; // c implements Comparator interface } // one-parameter constructor CS-2851 Dr. Mark L. Hornick 9 The Comparator interface allows a user of a class to override how that class performs comparisons of keys Interface Comparator<T> { // Compares its two arguments for order. int compare(T o1, T o2); // Indicates whether some other object is "equal to" this Comparator boolean equals(Object obj); } For example, the String objects can be ordered by the length of the string instead of lexicographically CS-2851 Dr. Mark L. Hornick 10 Tree Sets CS-2851 Dr. Mark L. Hornick 11 A TreeSet is an ordered Collection in which duplicate elements are not allowed The TreeSet class has all of the methods in the Collection interface add, remove, size, contains, … plus toString (inherited from AbstractCollection) public class TreeSet<E> extends AbstractSet<E> implements SortedSet<E>, Cloneable, java.io.Serializable { CS-2851 Dr. Mark L. Hornick 12 The TreeSet constructors public TreeSet( ) // assumes elements ordered by // Comparable interface public TreeSet (Comparator<? super E> c) // assumes elements ordered // by Comparator c public TreeSet (Collection<? extends E> c) // copy constructor; assumes elements ordered // by Comparable interface CS-2851 Dr. Mark L. Hornick 13 The TreeSet class is implemented with TreeMap in which all of the values are the same The TreeSet elements are the keys in the underlying map A dummy object is associated with the value in the underlying map All the work is done by the underlying map /** * Initializes this TreeSet object to be empty. public TreeSet( ) { this (new TreeMap<E, Object>( )); } // default constructor CS-2851 Dr. Mark L. Hornick 14