Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer...
Transcript of Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer...
![Page 1: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/1.jpg)
Computer Science II4003-232-01 (Spring 2007-2008)
Week 5: Generics,Java Collection Framework
Richard ZanibbiRochester Institute of Technology
![Page 2: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/2.jpg)
Generic Types in Java
(Ch. 21 in Liang)
![Page 3: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/3.jpg)
- 3 -
What are ‘Generic Types’ or ‘Generics’?
Definition– Reference type parameters for used to modify class, interface and
method definitions (at compile time)– Recall: “normal” (actual) method parameters: values from a
primitive/reference type (at run-time for variables)– Generic types define ‘macros:’ the class name replaces the type
parameter in the source code (“search and replace”)
Syntax<C> for parameter, use as C elsewhere (C must be a class/interface)
• public class Widget <C> { .... } // class definition• Widget<String> widget = new Widget<String>(); // instantiation• public <C> void test( C o1, int x ) { C temp; .... } // method definition• widget.<Integer>test(new Integer(5), 1); // invoking method
Purpose: Avoiding ‘Dangerous’ PolymorphismPrevent run-time errors (exceptions) due to type errors (casts)
![Page 4: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/4.jpg)
- 4 -
Example: Comparable InterfacePrior to JDK 1.5 (and Generic Types):public interface Comparable { public int compareTo(Object o) }
Comparable c = new Date();System.out.println(c.compareTo(“red”));
JDK 1.5 (Generic Types):public Interface Comparable<T> { public int compareTo(T o) }
Comparable<Date> c = new Date();System.out.println(c.compareTo(“red”));
run-time error
compile-time error
![Page 5: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/5.jpg)
- 5 -
“Raw Types” andAssociated Compiler Warnings
Raw Types (for backward compatability)Classes with generic type parameters used without the type
parameters defined• e.g. Comparator c ~= Comparator<Object> c
Recommendation: always set generic type parameters for variabletypes• e.g. Comparator<Date> c = new Date();
Compiler Warnings– javac will give a warning about possibly unsafe operations (type
errors) at run-time for raw types• use -Xlint:unchecked flag (or, -Xlint:all) for detailed messages.
– javac will not compile programs whose generic types cannot beproperly defined• e.g. Max.java, Max1.java (pp. 699-700 in Liang)
![Page 6: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/6.jpg)
Overview: Data Structures andAbstract Data Types
![Page 7: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/7.jpg)
- 7 -
Storing Data in Java
VariablesPrimitive type (int, double, boolean, etc.)
• Variable name refers to a memory location containing a primitive valueReference type (Object, String, Integer, MyClass, etc.)
• Variable name refers to a memory location containing a reference valuefor data belonging to an object
Data StructureA formal organization of a set of data (e.g. variables)e.g. Arrays: variables of a given type in an integer-indexed sequence
• int intArray[ ] = {1, 2}; int a = intArray[0]; intArray[1] = 5;e.g. Objects: data member names used to index variables
• player.name, player.hits, player.team ... player.hits = 100;
![Page 8: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/8.jpg)
- 8 -
Abstract Data Types (ADTs)PurposeDefine interfaces for complex data structures
• Hide (abstract) implementation details of operations that query and update• Define operations to be independent of the element type (Java: “generic”)
Some Common ADTsList: Sequence of elements. Elements may be inserted or removed
from any position in the list
Stack: List with last-in, first-out (LIFO) behaviour (“most recent”)e.g. call stack
Queue: List with first-in, first-out (FIFO) (“in-order”)e.g. lining up at a fast-food restaurant or bank
![Page 9: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/9.jpg)
- 9 -
Common ADTs, Cont’dTree: Graph with directed edges, each node has one parent (except
root), no cycles.• A decision tree representing possible moves in a game oftic-tac-toe.
Set: Unordered group of unique items• Students in a class, the set of words in a text file
Map: Set of entries, each with unique key and (possibly non-unique)value• Student grade sheet: (StudentId, Grade)• Frequency of words in a text file (Word, Count)
![Page 10: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/10.jpg)
- 10 -
AB C
D
s.add(E)
AB C
D E
s.add(E)Set s
ABCDl.add(E)
ABCDEl.add(E,2)
ABECDE
List l
(2, Maria)
(1, Joe)
(2, Maria)
(1, Joe)
(3, Dina)
(2, Maria)
(1, John)
(3, Dina)
m.add((3,Dina)) m.add((1,John))
Map m
C
A
D
E
B
C
A
D
E
B F
(Binary Search) Tree t
t.add(F)
< >
m.add(2,Maria)
![Page 11: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/11.jpg)
- 11 -
Example:Implementing Abstract Data Types
List ADTRepresents series of elements, insertion and deletion of elements
Some Possible Implementations:– Arrays:
L.add(E) would copy E at the end of the array, L.get(4) returns 5th item inarray
– Linked List: (objects forming a chain of references)L.add(E) would create a link from last node to a new node for E ; l.get(4)
traverses the graph and then returns the 5th item
Choosing an Implementation for an ADTDepending on common operations, some better than others– Retrieving elements in list faster for array implementation– Inserting, deleting elements faster for linked list implementation in
general case
![Page 12: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/12.jpg)
- 12 -
Ordering in ‘Unordered’ Sets and Maps‘Unordered’ in Theory vs. in CodeIn practice, an ordering of elements is used to implement a set, as
memory and files store data as lists of bytes.
SetsBy definition, a set is an unordered group of unique elements
MapsBy definition, a map is a set of (key,value) pairs, where all keys are
unique.
Ordering Sets and MapsWe can order the storage of set elements by:
1. The order in which elements are added (e.g. in a list)2. The values of keys or data elements themselves (e.g. using a binary
search tree)3. A value computed for each element (“hash code”) that determines
where an element is stored (e.g. in a “hash table”, a sophisticated ADTbuilt on arrays); for maps, hash code computed using key value
![Page 13: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/13.jpg)
- 13 -
Exercise: Generics and ADTsPart A1. In one sentence, what is a generic type?2. What errors are generic types designed to prevent?3. Which javac flag will show details for (type) unsafe
operations?4. What do the following represent:
a) <? extends MyClass>b) <? super YourClass>c) <E extends Comparator<E>>
5. Write a java class GenX which has a generic typeparameter T, a public data member identity of type T,and a constructor that takes an initial value foridentity. Add a main method that constructs oneGenX object using type String, and another usingtype Integer.
![Page 14: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/14.jpg)
- 14 -
Part B1. What is an abstract data type?2. How is a list different from a set?3. How are elements stored in a binary
search tree (BST)?4. In what ways can we order the elements
of a set, or pairs of a map?5. Are sets and map elements/pairs
ordered in their ADT definitions?
![Page 15: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/15.jpg)
ADTs in Java:The Java Collections Framework
![Page 16: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/16.jpg)
- 16 -
The Java Collections FrameworkDefinitionSet of interfaces, abstract and concrete classes that define common
abstract data types in Java• e.g. list, stack, queue, set, map
Part of the java.util package
ImplementationExtensive use of generic types, hash codes (Object.hashCode()) , and
Comparable interface (compareTo(), e.g. for sorting)
Collection InterfaceDefines common operations for sets and lists (‘unordered’ ops.)
MapsRepresented by separate interfaces from list/set(due to key/value relationship vs. a group of elements)
![Page 17: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/17.jpg)
- 17 -
Java Collections Interfaces(slide: Carl Reynolds)
Note: Some of the material on these slides was taken from the Java Tutorial at http://www.java.sun.com/docs/books/tutorial
![Page 18: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/18.jpg)
- 18 -
![Page 19: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/19.jpg)
- 19 -
Implementation Classes(slide derived from: Carl Reynolds)
HashTableProperties
LinkedHashMapTreeMapHashMapMap
VectorStack
LinkedListArrayListList
LinkedHashSetTreeSetHashSetSet
HistoricalImplementationInterface
Note: When writing programs use the interfaces rather than the implementation classeswhere you can: this makes it easier to change implementations of an ADT.
![Page 20: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/20.jpg)
- 20 -
Notes on ‘Unordered’ Collections(Set, Map Implementations)
HashMap, HashSetHash table implementation of set/mapUse hash codes (integer values) to determine where set elements or
(key,value) pairs are stored in the hash table (array)
LinkedHashMap, LinkedHashSetProvide support for arranging set elements or (key,value) pairs by
order of insertion by adding a linked list within the hash tableelements
TreeMap,TreeSetUse binary search tree implementations to order set elements by
value, or (key,value) pairs by key value
![Page 21: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/21.jpg)
- 21 -
Sets in the Collections Framework
E: a generic type parameter
![Page 22: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/22.jpg)
- 22 -
E: a generic type parameter
![Page 23: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/23.jpg)
- 23 -
HashSet(Example: TestHashSet.java, p. 717)Methods:Except for constructors, defined methods identical to Collection
Element Storage:‘Unordered,’ but stored in a hash table according to their hash codes**All elements are uniqueDo not expect to see elements in the order you add them when you output
them using toString().
Hash Codes– Most classes in Java API override the hashCode() method in the Object
class– Need to be defined to properly disperse set elements in storage (i.e.
throughout locations of the hash table)– For two equivalent objects, hash codes must be the same
![Page 24: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/24.jpg)
- 24 -
LinkedHashSet(example: TestLinkedHashSet.java, p. 718)
MethodsAgain, same as Collection Interface except for
constructors
Addition to HashSet– Elements in hash table contain an extra field defining
order in which elements are added (as a linked list)– List maintained by the class
Hash CodesNotes from previous slide still apply (e.g. equivalent
objects, equivalent hash codes)
![Page 25: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/25.jpg)
- 25 -
Ordered Sets: TreeSet(example: TestTreeSet.java)
MethodsAdd methods from SortedSet interface:first(), last(), headSet(toElement: E), tailSet(fromElement: E)
ImplementationA binary search tree, such that either:1. Objects (elements) implement the Comparable interface (compareTo() )
(“natural order” of objects in a class), or2. TreeSet is constructed using an object implementing the Comparator
interface (compare()) to determine the ordering (permits comparingobjects of the same or different classes, create different orderings)
One of these will determine the ordering of elements.
Notes– It is faster to use a hash set to retrieve elements, as TreeSet keeps
elements in a sorted order– Can construct a tree set using an existing collection (e.g. a hash set)
![Page 26: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/26.jpg)
- 26 -
Iterator Interface
PurposeProvides uniform way to traverse sets and listsInstance of Iterator given by iterator() method in Collection
Operations– Similar behaviour to operations used in Scanner to
obtain a sequence of tokens– Check if all elements have been visited (hasNext())– Get next element in order imposed by the iterator
(next())– remove() the last element returned by next()
![Page 27: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/27.jpg)
- 27 -
List Interface (modified slide from Carl Reynolds)
// Positional Access get(int):E; set(int,E):E; add(int, E):void;remove(int index):E; addAll(int, Collection):boolean;
// Search int indexOf(E); int lastIndexOf(E);
// Iteration listIterator():ListIterator<E>; listIterator(int):ListIterator<E>;
// Range-view List subList(int, int):List<E>;
List<E>
![Page 28: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/28.jpg)
- 28 -
ListIterator(modified slide from Carl Reynolds)
the ListIteratorinterface extendsIterator
Forward and reversedirections are possible
ListIterator isavailable for JavaLists, such as theLinkedListimplementation
hasNext():boolean; next():E;
hasPrevious():boolean;previous(): E;
nextIndex(): int;previousIndex(): int;
remove():void; set(E o): void;add(E o): void;
ListIterator <E>
![Page 29: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/29.jpg)
- 29 -
The Collections Class
Operations for Manipulating CollectionsIncludes static operations for sorting, searching,replacing elements, finding max/min element, andto copy and alter collections in various ways.(using this in lab5)
Note!Collection is an interface for an abstract datatype, Collections is a separate class for methodsoperating on collections.
![Page 30: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/30.jpg)
- 30 -
List: Example
TestArrayAndLinkedList.java(course web page)
![Page 31: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/31.jpg)
- 31 -
Map <K,V> Interface (modified slide from Carl Reynolds)
// Basic Operations put(K, V) :V; g et(K) :V; remove(K) :V; containsKey(K) :boolean; containsValue(V) :boolean; size( ) : int ; isEmpty( ) :boolean;
// Bulk Operations void putAll(Map t) :void ; void clear( ) :void ;
// Collection Views keySet( ) :Set< K> ; values( ) :Collection<V> ; entrySet( ) :Set< Entry< K,V> > ;
Map <K,V>
g etKey( ) :K; g etValue( ) :V; setValue(V) :V;
Entry <K,V>
![Page 32: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/32.jpg)
- 32 -
Map Examples
CountOccurranceOfWords.java(course web page)
TestMap.java (from text)
![Page 33: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/33.jpg)
- 33 -
Comparator Interface(a generic class similar to Comparable)
(comparator slides adapted from Carl Reynolds)
You may define an alternate ordering for objects of aclass using objects implementing the ComparatorInterface (i.e. rather than using compareTo())
Sort people by age instead of nameSort cars by year instead of Make and ModelSort clients by city instead of nameSort words alphabetically regardless of case
![Page 34: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/34.jpg)
- 34 -
Comparator<T> Interface
One method:compare( T o1, T o2 )
Returns:negative if o1 < o2Zero if o1 == o2positive if o1 > o2
![Page 35: Computer Science II 4003-232-01 (Spring 2007-2008)rlaz/cs2-20082/slides/CS2_Week5.pdf · Computer Science II 4003-232-01 (Spring 2007-2008) Week 5: Generics, Java Collection Framework](https://reader030.fdocuments.net/reader030/viewer/2022041207/5d62aeb688c993dc118bc79b/html5/thumbnails/35.jpg)
- 35 -
Example Comparator:Compare 2 Strings regardless of case
import java.util.*;public class CaseInsensitiveComparator implements Comparator<String> { public int compare( String stringOne, String stringTwo ) { // Shift both strings to lower case, and then use the // usual String instance method compareTo() return stringOne.toLowerCase().compareTo( stringTwo.toLowerCase() ); }}