200 likes | 401 Views
CS 2 and Java’s Comparator Interface. McCloskey, Beidler, & Bi Computing Sciences University of Scranton. CS 2 and Java’s Comparator Interface. Using Interfaces Comparable versus Comparator Why aren’t you using the Comparator Interface? How to apply the Comparator Interface Observations.
E N D
CS 2 and Java’s Comparator Interface McCloskey, Beidler, & Bi Computing Sciences University of Scranton
CS 2 and Java’s Comparator Interface • Using Interfaces • Comparable versus Comparator • Why aren’t you using the Comparator Interface? • How to apply the Comparator Interface • Observations
Using Interfaces • Java Interfaces • Specifications: Let’s you say what is expected to be accomplished without committing to how it will be carried out • Standards: Let’s you describe a standard that may be applied over a collection of classes • A great software engineering tool
Comparable versus Comparator • Comparable Interface • Standard that is applied when a class has a natural order. • Implemented within the class with a compareTo method. • The compareTo method should apply a total ordering on the class
Comparable versus Comparator • Comparator Interface • Standard that is applied to describe a problem dependent ordering of a class. • Implemented outside the class with a class that contains a compare method that maps a total ordering onto the objects in the target class. • Frequently the compare method makes use of the compareTo methods of a class’s instance variables
Why aren’t you using the Comparator Interface? • Didn’t really know about it • The Comparable interface is good enough. I can do everything with it. I don’t need the Comparator interface. • Too be honest, I couldn’t quite figure out how to implement it.
Why aren’t you using the Comparator Interface? • If you are overusing the Comparable interface and not using the Comparator interface (like most text books) you are doing a disservice to your students. • Why?
Why aren’t you using the Comparator Interface? • Every problem dependent ordering should be carried out with a Comparator.
Why aren’t you using the Comparator Interface? • Every class that expects to order objects from another class should be constructed to accept the ordering from a comparator. • Array Ordering, logical ordering • Ordered List, skip list • BST, AVL, … • Writing an ordering class to use comparators makes it industrial strength; it can order anything.
How to apply the Comparator Interface • Constructing a class that implements the comparator interface public class MyComparator implements Comparator{ public int compare(Object L, Object R){ // returns a negative int if L<R // 0 if L==P // a positive int if L>R } }
How to apply the Comparator Interface • Illustration: Assume that objects in a class Able have an instance variable accessed by getData() and it is a Comparable object. public class MyCtor implements Comparator{ public int compare(ObjectL, Object R){ return ((Able)L).getData().compareTo(((Able)R).getData()); } }
How to apply the Comparator Interface • Comparator may include a constructor public class MyCtor implements Comparator{ MyCtor (){ . . . } public int compare(ObjectL, Object R){ . . . } }
How to apply the Comparator Interface Comparator Class Application
How to apply the Comparator Interface • Student Class: Possible orderings • Alpha by last name • By class (no. of credits) • By ZIP • By major • By various combinations of instance variables
How to apply the Comparator Interface Comparator1 Application1 Class Comparator2 Application2 Applicationn Comparatorn
How to apply the Comparator Interface Comparator1 Class Comparator2 Application Comparatorn
How to apply the Comparator Interface Comparator c = new SomeComparator(); … BinSearchTree T = new BinSearchTree(c); … Using a comparator to implement an ordering class, like a BST, expands reusability (genericity) of the ordering class.
Observations • See examples in the paper • Student class • Basic comparators – simple orderings • Compound comparators • By class, by GPA, by … • By any logical combination of the above • Logical (indirect) ordering
Conclusions • Are you teaching Java. • Or are you teaching how to develop software in Java using, and building upon, the API • Applying the Comparator interface for all problem dependent orderings enhances software reuse.
Conclusions • Our resources http://www.cs.uofs.edu/~beidler/cmps240/text/ Username: cmps240 Password: bebimc