Student.java


Below is the syntax highlighted version of Student.java from §2.5 Sorting Applications.


/*************************************************************************
 *  Compilation:  javac Student.java
 *  Execution:    java Student
 *  
 *  Illustrates implementation of a Comparator
 *
 *  % By name
 *  ----------
 *  2 Alice
 *  1 Bob
 *  2 Carol
 *  1 Dave
 *  2 Eve
 *  3 Frank
 *  1 Grant
 *  3 Helia
 *  3 Isaac
 *  1 Jen
 *  1 Kevin
 *  2 Larry

 *  By section
 *  ----------
 *  1 Bob
 *  1 Dave
 *  1 Grant
 *  1 Jen
 *  1 Kevin
 *  2 Alice
 *  2 Carol
 *  2 Eve
 *  2 Larry
 *  3 Frank
 *  3 Helia
 *  3 Isaac
 *
 *  By Kevin
 *  ----------
 *  1 Kevin
 *  2 Larry
 *  2 Alice
 *  1 Bob
 *  2 Carol
 *  1 Dave
 *  2 Eve
 *  3 Frank
 *  1 Grant
 *  3 Helia
 *  3 Isaac
 *  1 Jen
 *
 *************************************************************************/

import java.util.Arrays;
import java.util.Comparator;

public class Student {
   
    public static final Comparator<Student> BY_NAME    = new ByName();
    public static final Comparator<Student> BY_SECTION = new BySection();
    public final Comparator<Student> BY_MY_NAME = new ByMyName();

    private final String name;
    private final int section;

    // constructor
    public Student(String name, int section) {
        this.name = name;
        this.section = section;
    }

    // comparator to sort by name
    private static class ByName implements Comparator<Student> {
        public int compare(Student a, Student b) {
            return a.name.compareTo(b.name);
        }
    }

    // comparator to sort by section
    private static class BySection implements Comparator<Student> {
        public int compare(Student a, Student b) {
            return a.section - b.section;
        }
    }

    // comparator to sort by name with this name first
    // illustrates the use of a non-static comparator
    private class ByMyName implements Comparator<Student> {
        public int compare(Student a, Student b) {
            if (a.name.compareTo(b.name) == 0) return 0;
            if (a.name.compareTo(name) == 0) return -1;
            if (b.name.compareTo(name) == 0) return +1;
            if ((a.name.compareTo(name) < 0) && (b.name.compareTo(name) > 0))
                return +1;
            if ((a.name.compareTo(name) > 0) && (b.name.compareTo(name) < 0))
                return -1;
            return a.name.compareTo(b.name);
        }
    }

    // return string representation
    public String toString() {
        return section + " " + name;
    }


    // test client
    public static void main(String[] args) {

        // create an array of students
        Student alice  = new Student("Alice",  2);
        Student bob    = new Student("Bob",    1);
        Student carol  = new Student("Carol",  2);
        Student dave   = new Student("Dave",   1);
        Student eve    = new Student("Eve",    2);
        Student frank  = new Student("Frank",  3);
        Student grant  = new Student("Grant",  1);
        Student helia  = new Student("Helia",  3);
        Student isaac  = new Student("Isaac",  3);
        Student jen    = new Student("Jen",    1);
        Student kevin  = new Student("Kevin",  1);
        Student larry  = new Student("Larry",  2);
        Student[] students = {
            larry, kevin, jen, isaac, grant, helia,
            frank, eve, dave, carol, bob, alice
        };

        // sort by name and print results
        StdOut.println("By name");
        StdOut.println("----------");
        Arrays.sort(students, Student.BY_NAME);
        for (int i = 0; i < students.length; i++)
            StdOut.println(students[i]);
        StdOut.println();


        // now, sort by section and print results
        StdOut.println("By section");
        StdOut.println("----------");
        Arrays.sort(students, Student.BY_SECTION);
        for (int i = 0; i < students.length; i++)
            StdOut.println(students[i]);
        StdOut.println();

        // now, sort by name relative to Kevin
        StdOut.println("By Kevin");
        StdOut.println("----------");
        Arrays.sort(students, kevin.BY_MY_NAME);
        for (int i = 0; i < students.length; i++)
            StdOut.println(students[i]);
        StdOut.println();


    }

}


Copyright © 2002–2010, Robert Sedgewick and Kevin Wayne.
Last updated: Mon Feb 14 09:37:55 EST 2011.