Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Collections Joel Adams and Jeremy Frens Calvin College (1/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Review: The API We’ve seen that classes can be organized into hierarchies… We’ve also seen that the Java API provides documentation… The API lets you easily find: What methods are defined within a class What methods are inherited from its superclass What methods are inherited from its superclass … What methods are inherited from the Object class. The API is an invaluable resource for Java programmers. (2/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College javadoc How is the Java API created and maintained? Java distributions include a utility called javadoc that automatically generates HTML API-style pages for a class. javadoc scans a .java file for special javadoc comments: and within those comments, scans for javadoc tags: Running javadoc on that file will then generate documentation pages similar to those of the API. (3/21) 2003 Joel C. Adams. All Rights Reserved. /** @author <i>Adams</i> @version 1.0 @param Siemens @param Dematic @return Java @see Frens */ Dept of Computer Science Calvin College Exercise: Part I Work through Part I of today’s exercise: 1. Examine the javadoc comments in the source files below: 2. Then run javadoc on them. 3. Then use your browser to examine the HTML files javadoc generated. Name.java PhoneNumber.java Person.java Employee.java 4. Make the suggested modifications to the source files, repeat steps 2 & 3 to see view the changes. (4/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College javadoc Tags As of version 1.4.2, javadoc looks for these tags: @author @docRoot @deprecated @exception @inheritDoc @link @linkPlain @param @return @see @serial @serialData @serialField @since @throws @value @version Javadoc also lets you create your own custom tags via doclets… @see http://java.sun.com/j2se/1.4.2/docs/tooldocs/javadoc/index.html (5/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Interfaces In addition to the class, Java also supports the interface … A Java class can extend just 1 superclass (single inheritance) A Java class can implement multiple interfaces… So what is an interface? A set of requirements that: • Classes wanting to conform to the interface must implement; and • Users of such classes can assume have been implemented. Uses the keyword interface in place of class Implementers use the keyword implements instead of extends An alternative means of declaring a handle. (6/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Interface Example Java provides a Comparable interface: public interface Comparable { public int compareTo(Object other); } We could update our Employee class by adding: class Employee extends Person implements Comparable { public int compareTo(Object other) { if (other instanceof Employee) { Employee emp = (Employee) other; if (myID < emp.getID()) { return -1; } else if (myID > emp.getID()) { return 1; } else { return 0; } } else { return 1; } } ... } (7/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Interface Example (Ct’d) If a data structure stores Comparable references (handles), any item in it can be sent the compareTo() message… Java’s java.util.Arrays class provides these methods: sort(), that uses compareTo() to implement a refined version of the quicksort algorithm; binarySearch(), that uses compareTo() to search a sorted array using the binary search algorithm; equals(), that uses compareTo() to determine whether or not two arrays are equal; … We’ll see more of interfaces later. (8/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Exercise: Part II Work through Part II of today’s exercise… 1. Follow the directions to implement the Comparable interface on the class files for Part II. 2. Use the provided Driver to verify your code. 3. Compare the result of == and equals(). Make sure you understand why what you observe is happening. (9/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Containers The package java.util has Java’s container classes… Classes that "contain" (store references to) objects… AbstractCollection AbstractList Abstract Sequential List LinkedList (10/21) AbstractMap AbstractSet ArrayList HashSet HashMap TreeMap TreeSet The “leaf” classes are called the concrete containers, because they are not abstract. 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College The Container Interfaces Collection is an interface that other interfaces extend: «interface» Collection «interface» List «interface» Set «interface» SortedSet «interface» Map «interface» Iterator «interface» SortedMap «interface» ListIterator You can put(aKey, anObject) and get(aKey) via a Map… You can add(anObject) toYou can visit the values in either a Collection… using an Iterator… (11/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College The Collections Framework Each of the Collections classes implements one or more interfaces…. (12/21) Class Implements Interfaces LinkedList Cloneable, Collection, List, Serializable ArrayList Cloneable, Collection, List, RandomAccess, Serializable HashSet Cloneable, Collection, Serializable, Set TreeSet Cloneable, Collection, Serializable, Set, SortedSet HashMap Cloneable, Map, Serializable TreeMap Cloneable, Map, Serializable, SortedMap 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Lists The ArrayList and LinkedList classes implement List List list1 = new ArrayList(), list2 = new LinkedList(); // empty; cap. 10 // empty We can send either object any message from the List API: list1.add( anObject ); list2.add( anObject ); // O(1) // O(1) list1.remove( someObject ); list2.remove( someObject ); // O(n)+O(n) // O(n)+O(1) int i = list1.indexOf( anObject ), // O(n) j = list2.indexOf( anotherObject ); // O(n) Object obj1 = list1.get(i), obj2 = list2.get(j); ... (13/21) 2003 Joel C. Adams. All Rights Reserved. // O(1) // O(n) Dept of Computer Science Calvin College Iterators … can be used to traverse any of the containers: Iterator it = list2.iterator(); while ( it.hasNext() ) { Object obj = it.next(); // do something with obj } // like i++ Gotcha: remove() removes the last thing next() returned: Iterator it1 = list1.iterator(), it2 = list2.iterator(); it1.next(); it1.remove(); // O(n) it2.next(); it2.remove(); // O(1) The ListIterator interface specifies additional operations that are useful for manipulating LinkedList objects. (14/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Sets If the order in which objects are stored doesn’t matter, then a Set may be the appropriate container… HashSet hs = new HashSet(); // uses hashCode() TreeSet ts = new TreeSet(); // uses compareTo() add(), remove() are used manipulate either kind of Set: hs.add( anObject ); ts.add( anObject ); hs.remove( anObject ); ts.remove( anObject ); A HashSet stores objects in a hash table (an array of linked lists), and tries to achieve O(1) access time. A TreeSet stores objects in a red-black tree (a self-balancing binary search tree), guaranteeing O(lg(n)) access time. (15/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Maps A Set requires an exact copy to do a lookup… A Map lets you lookup using partial information (a key). HashMap hm = new HashMap(); TreeMap tm = new TreeMap(); // uses hashing // uses r-b tree A Map (aka a dictionary) stores (key, value) pairs: hm.put( new Integer(emp1.getID() ), emp1); tm.put( new Integer(emp2.getID() ), emp2); The value part can then be accessed using the key part: Employee e1 = (Employee)hm.get( new Integer(anID) ); Employee e2 = (Employee)tm.get( new Integer(anotherID) ); ... hm.remove( new Integer(anID) ); tm.remove( new Integer(anotherID) ); (16/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College The Collections Class … provides methods that manipulate containers, including: binarySearch(aList, key) // return index of key copy(srcList, destList) // copy srcList into destList fill(aList, obj) // replace all values with obj max(aCollection) // return maximum value min(aCollection) // return minimum value replaceAll(aList, old, new) // replace each instance of old with new reverse(aList) // reverse the order of values rotate(aList, i) // rotate values i positions shuffle(aList) // randomly reorder values sort(aList) // order values (using Comparable) swap(aList, i, j) // swap the values at indices i and j and many more (see the Collections API)… (17/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College UML Notation … represents interface implementation with dashed arrows: Collection List AbstractList * AbstractCollection Random Access Abstract ArrayList Sequential List * Map Set Sorted AbstractSet Set HashSet TreeSet * Sorted AbstractMap Map HashMap TreeMap * == Cloneable, Serializeable LinkedList (18/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College * Legacy Classes Java also provides “legacy” containers that have been a part of the language since before the collections framework: List Map AbstractList Dictionary Deprecated HashTable Like HashMap, with all accesses synchronized (thread-safe, slow) Vector Stack Like ArrayList, with all accesses synchronized (thread-safe, slow) An array-based LIFO (push, pop, peek, …) Properties A (String,String) map; save/load via a file; secondary defaults table These do not reflect good object-oriented design… (19/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Summary Javadoc provides a convenient way to create hypertext documentation for a class and its methods. Java supports only single inheritance, but a class can implement multiple interfaces. The java.util package provides several container classes: ArrayList LinkedList HashSet TreeSet HashMap TreeMap plus the legacy classes (some of which are deprecated). These can be used as is, or extended to build other traditional data structures (Stack, Queue, PriorityQueue, …) (20/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College Exercise: Part III Use the time remaining to complete Part III of today’s exercise (anything you do not finish is homework). (21/21) 2003 Joel C. Adams. All Rights Reserved. Dept of Computer Science Calvin College