Computer Science 15-111 (Sections A & B), Spring 2007

Class (Recitation) Notes:  01-Mar-2007

 

Here are some code samples we developed today in recitation:

1.      Implementing Comparable:

import java.util.*;
import static java.lang.System.out;

class MyString implements Comparable {
  public MyString(String s) { this.s = s; }
 
  public int compareTo(Object obj) {
    MyString that = (MyString) obj;
    return this.s.compareTo(that.s);
  }
 
  public String toString() {
    return "<" + this.s + ">";
  }
 
  private String s;
 
  public static void main(String[] args) {
    MyString[] y = { new MyString("yak"),
                     new MyString("bar"),
                     new MyString("foo")
                   };
    Arrays.sort(y);
    out.println(Arrays.toString(y));
  }
}



2.      Implementing Comparator:

import java.util.*;
import static java.lang.System.out;

class MyStringComparator implements Comparator {
 
  public MyStringComparator(boolean forwards, boolean ignoreCase) {
    this.forwards = forwards;
    this.ignoreCase = ignoreCase;
  }
 
  private boolean forwards, ignoreCase;
 
  public int compare(Object obj1, Object obj2) {
    String s1 = (String) obj1;
    String s2 = (String) obj2;
    if (ignoreCase) {
      s1 = s1.toUpperCase();
      s2 = s2.toUpperCase();
    }
    if (forwards)
      return s1.compareTo(s2);
    else
      return -s1.compareTo(s2);
  }
 
  public static void main(String[] args) {
    String[] z = { "yak", "bar", "CAR", "foo" };
   
    // MyStringComparator(boolean forwards, boolean ignoreCase)
    Arrays.sort(z, new MyStringComparator(true,false));
    out.println(Arrays.toString(z));
    Arrays.sort(z, new MyStringComparator(true,true));
    out.println(Arrays.toString(z));
    Arrays.sort(z, new MyStringComparator(false,false));
    out.println(Arrays.toString(z));
    Arrays.sort(z, new MyStringComparator(false,true));
    out.println(Arrays.toString(z));
  } 
}


3.      A thought on Comparator as a Class rather than an Interface

 abstract class AbstractComparator implements Comparator {
     abstract public int compare(Object obj1, Object obj2);
  }


This allows you to replace "implements Comparator" with "extends AbstractComparator" in most cases.

Think about it!